[파이썬] lightgbm 범주형 피처 처리 방법

LightGBM은 범주형 피처(카테고리형 변수)를 처리하는 데에 있어서 다른 기계 학습 알고리즘보다 효율적인 방법을 제공합니다. 범주형 피처는 문자열이나 정수형 값으로 표현되며, 일반적으로 원-핫 인코딩이나 레이블 인코딩과 같은 처리가 필요합니다.

이번 블로그 포스트에서는 LightGBM을 사용하여 범주형 피처를 처리하는 방법을 알아보겠습니다. 파이썬에서 LightGBM을 사용하는 예시 코드를 제공하겠습니다.

원-핫 인코딩 (One-Hot Encoding)

원-핫 인코딩은 범주형 변수를 이진수 형태로 변환하는 방법입니다. 각 변수의 가능한 값은 새로운 이진 변수로 변환되며, 해당 값이 존재하는 경우에는 1로 표시되고, 그렇지 않은 경우에는 0으로 표시됩니다.

import pandas as pd
import lightgbm as lgb
from sklearn.model_selection import train_test_split

# 데이터셋 불러오기
data = pd.read_csv('dataset.csv')

# 범주형 피처를 원-핫 인코딩으로 변환
one_hot_encoded_data = pd.get_dummies(data, columns=['category_feature'])

# 학습 데이터와 테스트 데이터로 분할
X_train, X_test, y_train, y_test = train_test_split(one_hot_encoded_data.drop('target', axis=1), 
                                                    one_hot_encoded_data['target'], 
                                                    test_size=0.2, 
                                                    random_state=42)

# LightGBM 모델 정의
lgb_model = lgb.LGBMClassifier()

# 모델 학습
lgb_model.fit(X_train, y_train)

# 모델 예측
y_pred = lgb_model.predict(X_test)

레이블 인코딩 (Label Encoding)

레이블 인코딩은 범주형 변수의 각 값을 숫자로 매핑하여 변환하는 방법입니다. 각 값마다 고유한 숫자가 할당되며, 이 숫자들은 모델에 사용됩니다.

import pandas as pd
import lightgbm as lgb
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder

# 데이터셋 불러오기
data = pd.read_csv('dataset.csv')

# 범주형 피처를 레이블 인코딩으로 변환
label_enc = LabelEncoder()
data['category_feature'] = label_enc.fit_transform(data['category_feature'])

# 학습 데이터와 테스트 데이터로 분할
X_train, X_test, y_train, y_test = train_test_split(data.drop('target', axis=1), 
                                                    data['target'], 
                                                    test_size=0.2, 
                                                    random_state=42)

# LightGBM 모델 정의
lgb_model = lgb.LGBMClassifier()

# 모델 학습
lgb_model.fit(X_train, y_train)

# 모델 예측
y_pred = lgb_model.predict(X_test)

카테고리형 피처 지정

LightGBM은 자동으로 범주형 피처를 인식하기 때문에, 별도의 처리 없이 처리할 수 있습니다. 그러나 경우에 따라 범주형 피처로 인식되지 않을 수 있으므로, categorical_feature 파라미터를 사용하여 명시적으로 지정해줄 수 있습니다.

import pandas as pd
import lightgbm as lgb
from sklearn.model_selection import train_test_split

# 데이터셋 불러오기
data = pd.read_csv('dataset.csv')

# 학습 데이터와 테스트 데이터로 분할
X_train, X_test, y_train, y_test = train_test_split(data.drop('target', axis=1), 
                                                    data['target'], 
                                                    test_size=0.2, 
                                                    random_state=42)

# LightGBM 모델 정의
lgb_model = lgb.LGBMClassifier(categorical_feature=['category_feature'])

# 모델 학습
lgb_model.fit(X_train, y_train)

# 모델 예측
y_pred = lgb_model.predict(X_test)

이렇게 LightGBM을 사용하여 범주형 피처를 처리할 수 있습니다. 실제 데이터에 적용할 때에는 적절한 전처리 방법을 선택하여 성능을 향상시킬 수 있습니다.