728x90
트레이닝셋에는 없는 카테고리 데이터가 테스트셋에 존재할 때, 레이블 인코딩을 적용하려면 주의해야 한다.
이를 위해 트레이닝셋과 테스트셋을 합친 다음 레이블 인코딩을 적용한 후, 다시 분리하면 된다.
아래는 코드 예시
from sklearn.preprocessing import LabelEncoder
# 트레이닝셋과 테스트셋을 합칩니다.
combined_data = pd.concat([train_data['카테고리'], test_data['카테고리']], axis=0)
# LabelEncoder 객체를 생성하고 합쳐진 데이터에 적용합니다.
label_encoder = LabelEncoder()
combined_data_encoded = label_encoder.fit_transform(combined_data)
# 다시 트레이닝셋과 테스트셋으로 분리합니다.
train_data['카테고리_encoded'] = combined_data_encoded[:len(train_data)]
test_data['카테고리_encoded'] = combined_data_encoded[len(train_data):]
카테고리 피처가 여러 개일 경우 아래와 같이 적용한다.
from sklearn.preprocessing import LabelEncoder
# 레이블 인코딩을 적용할 카테고리 피처 목록
categorical_features = ['카테고리1', '카테고리2', '카테고리3']
# 트레이닝셋과 테스트셋을 합칩니다.
combined_data = pd.concat([train_data[categorical_features], test_data[categorical_features]], axis=0)
# 각 카테고리 피처에 대한 LabelEncoder를 적용합니다.
label_encoders = {}
for feature in categorical_features:
label_encoder = LabelEncoder()
combined_data[feature + '_encoded'] = label_encoder.fit_transform(combined_data[feature])
label_encoders[feature] = label_encoder
# 다시 트레이닝셋과 테스트셋으로 분리합니다.
for feature in categorical_features:
train_data[feature + '_encoded'] = combined_data[feature + '_encoded'][:len(train_data)]
test_data[feature + '_encoded'] = combined_data[feature + '_encoded'][len(train_data):]
728x90
'데이터사이언스 > 머신러닝' 카테고리의 다른 글
올바른 딥러닝 모델 학습을 위한 체크리스트 | 오버피팅과 일반화에 관하여 (0) | 2024.03.18 |
---|---|
상호 작용(Significant Interaction)과 상관 관계(Correlation) 차이 (1) | 2023.12.23 |
핸즈온 머신러닝 2 - 2장 End-to-End 머신러닝 프로젝트 요약 (0) | 2022.09.21 |
핸즈온 머신러닝 2 - 1장 기계학습 개요 (0) | 2022.09.19 |
앙상블 - 배깅 공부하다 끄적 (0) | 2022.08.09 |