pd.get_dummies()
를 사용하면 가변수화를 할 수 있다.
가변수화에는 One-Hot-Encoding과 One-Cold-Encoding이 있다.
보통 가변수화라고 하면 One-Hot-Encoding
을 뜻한다.
One-Hot-Encoding은 아래 이미지와 같은 작업을 말한다.
위 이미지처럼 One-Hot-Encoding을 하면 값들이 컬럼으로 생성되고 해당되는 컬럼에 1
이 표시되고 나머지 컬럼에는 0
으로 표시된다.
cf) One-Cold-Encoding은 One-Hot-Encoding에서 0과 1을 뒤집으면 된다.
pd.get_dummies()에서 drop_first=True
속성을 주면 첫 컬럼을 제외하고 만들어진다.
이미지 출처: 위 이미지를 가공하여 해당 이미지를 만듦.
위 이미지에서 Yellow와 Green 모두 0인 경우는 Red인 값이라고 해석하면 된다.
모델링을 하기 전에 범주형 데이터 들 중 숫자로 되어 있지 않은 변수들
에 대해서 가변수화를 진행
한다.
0과 1로만 구성된 숫자가 아닌
숫자로 된 범주형
에 대해서도 가변수화를 진행
한다.
중요도가 동일한 수준으로 증가하는 의미를 갖는다고 판단
되면 가변수화를 할 필요
가 없다.단, 가변수화 할 때와 안 할 때에는 성능 차이
가 있을 것이다.
가변수화를 했을 때와 안 했을 때 성능을 확인해볼 필요가 있다.
가변수화를 하면 기존 열이 제거되고, 그 의미를 파악하기 힘들게 수 많은 변수들이 만들어진다.
이렇게 되면 이후에 변수들의 중요도를 설명하기가 어려워 질 수 도 있다.
★따라서 설명을 위한 것인지 성능을 위한 것인지
고민하여 결정한다.
x1에 해당하는 모든 범주의 종류가 train 셋에 존재
해야한다.
그런데 train 데이터를 train과 validation 셋으로 분할
했을 때, train 셋에 x1에 해당하는 모든 범주의 종류가 포함되지 않을 수도
있다.
이 경우 모델의 학습이 제대로 이루어지지 않는다.
따라서 이런 상황을 방지하기 위해, 변수의 데이터 타입을 category로 변경
한다.
x, y분리와 train, val, test 셋 분리는 되어있다고 가정하자.
category로 데이터타입을 변경
데이터 분석(이해) 단계에서 진행
cat = {'Sex':['female', 'male'],
'Embarked':['S', 'Q', 'C'],
'Pclass':[1, 2, 3]}
for k, v in cat.items():
x_train[k] = pd.Categorical(x_train[k], categories=v, ordered=False)
x_train.info()
cat = {'Sex':['female', 'male'],
'Embarked':['S', 'Q', 'C'],
'Pclass':[1, 2, 3]}
x_train = pd.get_dummies(x_train, columns=cat.keys(), drop_first=True)
x_train.tail(2)