[python] scikit-learn을 사용한 피처 인코딩

피처 인코딩은 머신 러닝 모델에 데이터를 입력하기 전에 범주형 변수를 숫자로 변환하는 과정입니다. 이는 scikit-learn 패키지를 사용하여 간단하게 수행할 수 있습니다. 이번 블로그에서는 scikit-learn의 여러 인코딩 기법을 사용하는 방법에 대해 알아보겠습니다.

범주형 변수 인코딩

범주형 변수는 명목형과 순서형으로 구분할 수 있습니다. 명목형 변수는 순서가 없는 범주로 구성되어 있으며, 예를 들어 성별 변수(남성, 여성)가 있습니다. 순서형 변수는 범주가 순서를 가진 변수로, 예를 들어 학력 변수(초등학교, 중학교, 고등학교)가 있습니다.

1. 레이블 인코딩

레이블 인코딩은 명목형 변수의 각 범주를 숫자로 매핑하는 가장 간단한 인코딩 방법입니다. scikit-learn의 LabelEncoder를 사용하여 실습해보겠습니다.

from sklearn.preprocessing import LabelEncoder

# 레이블 인코더 객체 생성
encoder = LabelEncoder()

# 범주형 변수를 숫자로 변환
encoded_labels = encoder.fit_transform(['남성', '여성', '남성', '여성'])

print(encoded_labels)
# 출력: [0 1 0 1]

2. 원-핫 인코딩

원-핫 인코딩은 명목형 변수의 각 범주를 이진 벡터로 변환하는 인코딩 방법입니다. scikit-learn의 OneHotEncoder를 사용하여 실습해보겠습니다.

from sklearn.preprocessing import OneHotEncoder

# 원-핫 인코더 객체 생성
encoder = OneHotEncoder()

# 범주형 변수를 이진 벡터로 변환
encoded_data = encoder.fit_transform([['남성'], ['여성'], ['남성'], ['여성']])

print(encoded_data.toarray())
# 출력: [[1. 0.] [0. 1.] [1. 0.] [0. 1.]]

3. 순위 인코딩

순위 인코딩은 순서형 변수의 범주를 순위로 변환하는 인코딩 방법입니다. scikit-learn의 OrdinalEncoder를 사용하여 실습해보겠습니다.

from sklearn.preprocessing import OrdinalEncoder

# 순위 인코더 객체 생성
encoder = OrdinalEncoder()

# 범주형 변수를 순위로 변환
encoded_data = encoder.fit_transform([['초등학교'], ['고등학교'], ['중학교'], ['고등학교']])

print(encoded_data)
# 출력: [[1.] [0.] [2.] [0.]]

요약

scikit-learn을 사용하면 간단하게 범주형 변수를 인코딩할 수 있습니다. LabelEncoder, OneHotEncoder, OrdinalEncoder를 사용하여 레이블 인코딩, 원-핫 인코딩 및 순위 인코딩을 수행할 수 있습니다. 이러한 피처 인코딩 기법을 사용하여 데이터를 전처리하면 머신 러닝 모델의 성능을 향상시킬 수 있습니다.

참고 자료