원-핫 인코딩은 범주형(카테고리) 변수를 머신러닝 알고리즘이 처리할 수 있는 숫자 형식으로 변환하는 기법입니다. 각 범주를 하나의 “1”과 나머지 “0”으로 이루어진 이진 벡터로 표현하여, 범주 간의 순서를 암시하지 않습니다.
머신러닝 모델은 일반적으로 숫자 입력을 필요로 합니다. 범주형 값을 단순히 정수(예: 0, 1, 2)로 매핑하면 모델이 그 값들 사이에 불필요한 순서 관계나 거리 개념을 학습할 수 있습니다. 원-핫 인코딩은 각 범주를 독립된 특성으로 처리하여 이러한 문제를 해결합니다.
“색상(Color)” 변수가 {Red, Green, Blue} 세 가지 범주를 갖는 경우:
원본 데이터
| 샘플 | Color |
|---|---|
| 1 | Red |
| 2 | Blue |
| 3 | Green |
| 4 | Red |
원-핫 인코딩 결과
| 샘플 | Color_Red | Color_Green | Color_Blue |
|---|---|---|---|
| 1 | 1 | 0 | 0 |
| 2 | 0 | 0 | 1 |
| 3 | 0 | 1 | 0 |
| 4 | 1 | 0 | 0 |
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
# 샘플 DataFrame
df = pd.DataFrame({'Color': ['Red', 'Blue', 'Green', 'Red']})
# pandas.get_dummies 사용
df_encoded = pd.get_dummies(df, columns=['Color'])
print(df_encoded)
# Color_Blue Color_Green Color_Red
# 0 0 0 1
# 1 1 0 0
# 2 0 1 0
# 3 0 0 1
# scikit-learn OneHotEncoder 사용
encoder = OneHotEncoder(sparse=False)
encoded_array = encoder.fit_transform(df[['Color']])
encoded_df = pd.DataFrame(
encoded_array,
columns=encoder.get_feature_names_out(['Color'])
)
print(encoded_df)
# Color_Blue Color_Green Color_Red
# 0 0.0 0.0 1.0
# 1 1.0 0.0 0.0
# 2 0.0 1.0 0.0
# 3 0.0 0.0 1.0
원-핫 인코딩은 범주형 변수를 순서나 크기 개념 없이 이진 벡터로 변환하여 머신러닝 모델이 올바르게 처리하도록 돕는 기본적인 전처리 기법입니다. 카디널리티(cardinality)가 높은 변수에는 차원 수 증가 문제를 고려해 대안 기법을 함께 검토하는 것이 좋습니다.
출처