작성
·
37
0
범주형 인코딩을 할 때 아래 코드를 사용한다고 강의에서 말씀하셨습니다.
le_product = LabelEncoder()
le_store = LabelEncoder()
train['주구매상품_encode'] = le_product.fit_transform(train['주구매상품'])
train['주구매지점_encode'] = le_store.fit_transform(train['주구매지점'])
test['주구매상품_encode'] = le_product.fit_transform(test['주구매상품'])
test['주구매지점_encode'] = le_store.fit_transform(test['주구매지점'])
그런데 test 데이터에서 인코딩을 할 때 train에서와 같은 기준으로 인코딩을 해야 하니까, test에서는 fit_transform이 아니라 그냥 transform을 하는게 더 적절하지 않은지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. heidi415님께서 질문하신 범주형 인코딩 방법에 대해 설명드리겠습니다.
범주형 데이터를 인코딩할 때, LabelEncoder
를 사용하여 fit_transform
메서드를 적용하는 과정은 주로 학습 데이터셋(train set)에서 범주형 값을 숫자로 변환하기 위해 사용됩니다. 이때 fit_transform
을 사용함으로써 데이터를 학습하고 변환을 동시에 수행할 수 있으며, 이것은 LabelEncoder
가 어떤 범주를 어떤 숫자로 변환할지를 학습한다는 의미입니다.
하지만, 학습된 모델을 테스트 데이터셋(test set)에 적용할 때는 주의가 필요합니다. 테스트 데이터셋에서는 이미 학습된 인코더(LabelEncoder
)를 사용하여 동일한 기준으로 변환해야 합니다. 따라서, 테스트 데이터에 대해서는 fit
없이 transform
메서드만을 사용하는 것이 맞습니다. 이렇게 함으로써 새로운 데이터에 대해 학습 데이터의 인코딩 기준을 일관되게 유지할 수 있습니다.
다시 말해, 테스트 데이터셋에서 fit_transform
을 사용하는 경우, 범주의 숫자 매핑이 기존 학습 데이터셋과 다르게 적용될 수 있으므로 이는 부적절합니다. 따라서 아래와 같이 수정하시는 것이 맞습니다:
train['주구매상품_encode'] = le_product.fit_transform(train['주구매상품'])
train['주구매지점_encode'] = le_store.fit_transform(train['주구매지점'])
test['주구매상품_encode'] = le_product.transform(test['주구매상품'])
test['주구매지점_encode'] = le_store.transform(test['주구매지점'])
이에 대한 자세한 설명은 강의나 추가적인 자료에서도 확인하실 수 있습니다. 아래 링크는 유사한 주제에 대해 논의된 기존 게시글입니다:
- “Label Encoding과 One-Hot Encoding 사용 방법”
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.