답변함

25년도 빅분기 실기정규이론(파이썬) 파트3, 제2유형 기출예상문제 풀이 1번에서 나온 에러입니다.

x_test['주구매상품']=encoder_product.transform(x_test['주구매상품'])
x_test['주구매지점']=encoder_store.transform(x_test['주구매지점'])

 

--------------------------------------------------------------------------- KeyError                                  Traceback (most recent call last) File ~\anaconda3\Lib\site-packages\sklearn\utils\_encode.py:224, in _encode(values, uniques, check_unknown)    223 try: --> 224     return _map_to_integer(values, uniques)    225 except KeyError as e: File ~\anaconda3\Lib\site-packages\sklearn\utils\_encode.py:164, in _map_to_integer(values, uniques)    163 table = _nandict({val: i for i, val in enumerate(uniques)}) --> 164 return np.array([table[v] for v in values]) File ~\anaconda3\Lib\site-packages\sklearn\utils\_encode.py:164, in <listcomp>(.0)    163 table = _nandict({val: i for i, val in enumerate(uniques)}) --> 164 return np.array([table[v] for v in values]) File ~\anaconda3\Lib\site-packages\sklearn\utils\_encode.py:158, in _nandict.__missing__(self, key)    157     return self.nan_value --> 158 raise KeyError(key) KeyError: 3 During handling of the above exception, another exception occurred: ValueError                                Traceback (most recent call last) Cell In[124], line 1 ----> 1 x_test['주구매상품']=encoder_product.transform(x_test['주구매상품'])      2 x_test['주구매지점']=encoder_store.transform(x_test['주구매지점']) File ~\anaconda3\Lib\site-packages\sklearn\utils\_set_output.py:140, in _wrap_method_output.<locals>.wrapped(self, X, *args, **kwargs)    138 @wraps(f)    139 def wrapped(self, X, *args, **kwargs): --> 140     data_to_wrap = f(self, X, *args, **kwargs)    141     if isinstance(data_to_wrap, tuple):    142         # only wrap the first output for cross decomposition    143         return (    144             _wrap_data_with_container(method, data_to_wrap[0], X, self),    145             *data_to_wrap[1:],    146         ) File ~\anaconda3\Lib\site-packages\sklearn\preprocessing\_label.py:139, in LabelEncoder.transform(self, y)    136 if _num_samples(y) == 0:    137     return np.array([]) --> 139 return _encode(y, uniques=self.classes_) File ~\anaconda3\Lib\site-packages\sklearn\utils\_encode.py:226, in _encode(values, uniques, check_unknown)    224         return _map_to_integer(values, uniques)    225     except KeyError as e: --> 226         raise ValueError(f"y contains previously unseen labels: {str(e)}")    227 else:    228     if check_unknown: ValueError: y contains previously unseen labels: 3

 

 

0

댓글

댓글 1개
날짜 투표수
  • 안녕하세요 질의사항에 답변을 드립니다.

    오류 원인은 LabelEncoder로 이미 숫자 인코딩된 컬럼을 다시 transform()했기 때문으로 보입니다.

    즉, 처음 실행할 때는 주구매상품 컬럼에 "가공식품", "농산물", "수산물" 같은 문자형 값이 들어 있었고, LabelEncoder가 이를 0, 1, 2, 3...과 같은 숫자로 변환했습니다.

    그런데 같은 셀을 다시 실행하면, 이미 숫자로 바뀐 x_test['주구매상품']에 대해 다시 transform()을 수행하게 됩니다. 이때 LabelEncoder는 원래 학습한 문자형 라벨만 알고 있기 때문에 숫자 3을 새로운 라벨로 인식하여 다음 오류가 발생합니다.

    이 오류는 test 데이터에 새로운 상품이 있어서 발생했다기보다, 코드를 한 번 실행한 뒤 같은 인코딩 코드를 다시 실행했을 가능성이 높습니다.

    다시 처음부터 데이터 불러오기 실행하시고 순차적으로 코딩을 하세요 !
    .

    0

댓글을 남기려면 로그인하세요.

 

원하는 것을 찾지 못하셨나요?

질문하기