연습문제 풀이 에러 발생
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
댓글
안녕하세요 질의사항에 답변을 드립니다.
오류 원인은
LabelEncoder로 이미 숫자 인코딩된 컬럼을 다시transform()했기 때문으로 보입니다.즉, 처음 실행할 때는
주구매상품컬럼에"가공식품","농산물","수산물"같은 문자형 값이 들어 있었고,LabelEncoder가 이를0, 1, 2, 3...과 같은 숫자로 변환했습니다.그런데 같은 셀을 다시 실행하면, 이미 숫자로 바뀐
x_test['주구매상품']에 대해 다시transform()을 수행하게 됩니다. 이때LabelEncoder는 원래 학습한 문자형 라벨만 알고 있기 때문에 숫자3을 새로운 라벨로 인식하여 다음 오류가 발생합니다.이 오류는 test 데이터에 새로운 상품이 있어서 발생했다기보다, 코드를 한 번 실행한 뒤 같은 인코딩 코드를 다시 실행했을 가능성이 높습니다.
다시 처음부터 데이터 불러오기 실행하시고 순차적으로 코딩을 하세요 !
.
댓글을 남기려면 로그인하세요.