카테고리컬 인코딩
컴퓨터는 문자를 인식하지 못하기 때문에, 컴퓨터가 이해할 수 있도록
카테고리컬 데이터를 숫자로 바꿔주는 작업.
카테고리컬 인코딩에는 크게 2가지가 있다.
- Label Encoding : 0부터 넘버링, 카테고리컬 데이터가 3개 이상일 경우 학습 성능이 떨어진다.
- One-Hot Encoding : 카테고리컬 데이터를 0과 1의 숫자로 변환, 3개 이상의 카테고리컬 데이터일 경우 사용한다.
1. 레이블 인코딩(Label Encoding)
import pandas as pd
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
X['Country'] = encoder.fit_transform( X['Country'] )
sorted(X['Country'].unique())
>>> ['France', 'Germany', 'Spain']
카테고리컬 데이터의 정렬순서에 따라 넘버링 된다.
따라서 France가 0, Germany는 1, Spain이 2로 바뀌었다.
2. 원핫 인코딩(One-Hot Encoding)
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer( [ ('encoder', OneHotEncoder(), [0]) ],
# [( 이름, 트랜스포머, 컬럼 ) ]
remainder= 'passthrough')
# remainder = 'drop' : 변환하지 않는 컬럼을 모두 버린다.
# remainder = 'passthrough : 변환하지 않는 컬럼을 그대로 놔둔다.
X = ct.fit_transform(X)
X
>>> array([[1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 4.40000000e+01,
7.20000000e+04],
[0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 2.70000000e+01,
4.80000000e+04],
[0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 3.00000000e+01,
5.40000000e+04],
[0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 3.80000000e+01,
6.10000000e+04],
[0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 4.00000000e+01,
6.37777778e+04],
[1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 3.50000000e+01,
5.80000000e+04],
[0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 3.87777778e+01,
5.20000000e+04],
[1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 4.80000000e+01,
7.90000000e+04],
[0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 5.00000000e+01,
8.30000000e+04],
[1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 3.70000000e+01,
6.70000000e+04]])
sorted(X['Country'].unique())
>>> ['France', 'Germany', 'Spain']
원핫인코딩의 경우 카테고리컬 데이터의 정렬 순서에 따라
France는 (1, 0, 0)
Germany는 (0, 1, 0)
Spain은 (0, 0 ,1) 로 변환되었다.
※ 주의할 점은 기존 순서에 상관없이, ColumnTransformer를 사용하면 변환한 컬럼이 맨 앞으로 이동한다.
원핫인코딩을 하면 범주형 데이터 종류만큼 컬럼 수가 늘어나기 때문에,
컬럼 10개짜리 데이터프레임이 원핫인코딩 후 수백개의 컬럼이 될 수도 있다.
'Machine Learning' 카테고리의 다른 글
머신러닝 - Linear Regression 으로 수치 예측 (0) | 2022.12.07 |
---|---|
데이터 전처리 - 결측값 처리, 피처 스케일링, train_test_split (0) | 2022.12.05 |