가변수화
가변수화
가변수화에 대한 설명
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로만 구성된 숫자가 아닌
숫자로 된 범주형
에 대해서도 가변수화를 진행
한다.
- 이 경우에는 반드시 가변수화를 진행할 필요는 없다.
- ex) 설문조사에 대한 변수로써 1(매우 불만족) ~ 5(매우 만족)의 값을 갖고 있는 경우
- 이 경우,
중요도가 동일한 수준으로 증가하는 의미를 갖는다고 판단
되면가변수화를 할 필요
가 없다.
- 이 경우,
단, 가변수화 할 때와 안 할 때에는 성능 차이
가 있을 것이다.
가변수화를 했을 때와 안 했을 때 성능을 확인해볼 필요가 있다.
가변수화를 하면 기존 열이 제거되고, 그 의미를 파악하기 힘들게 수 많은 변수들이 만들어진다.
이렇게 되면 이후에 변수들의 중요도를 설명하기가 어려워 질 수 도 있다.
★따라서 설명을 위한 것인지 성능을 위한 것인지
고민하여 결정한다.
가변수화의 함정(?)
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()
- pd.getdummies()로 가변수화
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)
데이터 출처:https://www.kaggle.com/c/titanic
Author And Source
이 문제에 관하여(가변수화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@songjeongwoo/가변수화저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)