xgboost는 범주형 데이터를 처리하기 위해 다양한 방법을 제공합니다. 이 블로그 포스트에서는 xgboost에서 범주형 데이터를 처리하는 세 가지 주요 방법을 살펴보겠습니다.
1. One-Hot Encoding
One-Hot Encoding은 범주형 데이터를 원핫 벡터로 변환하는 방법입니다. 이 방법은 원래 범주형 변수의 카테고리 수만큼의 이진 변수를 생성합니다. 각 변수는 해당하는 카테고리만 1의 값을 가지고 나머지 변수들은 0의 값을 가집니다.
import pandas as pd
from sklearn.preprocessing import LabelEncoder
# 범주형 변수를 포함한 데이터 프레임 생성
data = pd.DataFrame({'color': ['red', 'blue', 'green', 'yellow'],
'size': ['small', 'large', 'medium', 'small'],
'label': [1, 0, 1, 0]})
# LabelEncoder를 사용하여 범주형 변수를 숫자로 인코딩
label_encoder = LabelEncoder()
data['color_encoded'] = label_encoder.fit_transform(data['color'])
data['size_encoded'] = label_encoder.fit_transform(data['size'])
# xgboost 학습을 위해 One-Hot Encoding 적용
data_encoded = pd.get_dummies(data, columns=['color', 'size'])
print(data_encoded)
위의 코드에서는 pandas의 get_dummies
함수를 사용하여 One-Hot Encoding을 적용했습니다. columns
매개변수를 사용하여 인코딩할 변수를 선택할 수 있습니다.
2. Ordinal Encoding
Ordinal Encoding은 범주형 데이터를 순서대로 레이블링하는 방법입니다. 각 카테고리에는 숫자가 할당되며 순서에 따라 작은 값이 작은 카테고리를 나타냅니다.
import pandas as pd
from sklearn.preprocessing import OrdinalEncoder
# 범주형 변수를 포함한 데이터 프레임 생성
data = pd.DataFrame({'color': ['red', 'blue', 'green', 'yellow'],
'size': ['small', 'large', 'medium', 'small'],
'label': [1, 0, 1, 0]})
# OrdinalEncoder를 사용하여 범주형 변수를 숫자로 인코딩
ordinal_encoder = OrdinalEncoder()
data['color_encoded'] = ordinal_encoder.fit_transform(data[['color']])
data['size_encoded'] = ordinal_encoder.fit_transform(data[['size']])
print(data)
위의 코드에서는 OrdinalEncoder
를 사용하여 범주형 변수를 인코딩합니다. fit_transform
메서드를 사용하여 데이터를 변환합니다.
3. CatBoost Encoding
CatBoost Encoding은 xgboost의 CatBoost 패키지에서 제공하는 범주형 데이터 처리 방법입니다. 이 방법은 각 카테고리의 타겟 변수 값을 대체하여 인코딩합니다. 이를 통해 범주형 벡터의 풍부한 정보를 활용하여 예측 성능을 향상시킬 수 있습니다.
import pandas as pd
from category_encoders import CatBoostEncoder
# 범주형 변수를 포함한 데이터 프레임 생성
data = pd.DataFrame({'color': ['red', 'blue', 'green', 'yellow'],
'size': ['small', 'large', 'medium', 'small'],
'label': [1, 0, 1, 0]})
# CatBoostEncoder를 사용하여 범주형 변수를 인코딩
cat_encoder = CatBoostEncoder()
data['color_encoded'] = cat_encoder.fit_transform(data['color'], data['label'])
data['size_encoded'] = cat_encoder.fit_transform(data['size'], data['label'])
print(data)
위의 코드에서는 CatBoostEncoder
를 사용하여 범주형 변수를 인코딩합니다. fit_transform
메서드를 사용하여 데이터를 변환하며, 타겟 변수(label
) 값도 함께 제공해야 합니다.
이제 xgboost에서 범주형 데이터를 처리하는 세 가지 방법에 대해 알아보았습니다. 어떤 방법을 선택할지는 데이터의 특성과 목적에 따라 달라질 수 있습니다. 적절한 방법을 선택하여 모델의 성능을 향상시키는 데 도움이 되길 바랍니다.