One-Hot Encoding

One-Hot Encoding 이란 범주형 변수의 카테고리 별로 이진 특성을 만들어 해당하는 특성만 1, 나머지는 0으로 만드는 방법이다.

독립변수(예측변수)가 범주형 변수일 경우 이용할 수 있다.

데이터 분석을 할 때 예측하려는 값이 연속형 변수가 아닌 범주형 변수일 경우, 그 값을 분석모델에 적용시키면 아래와 같이 에러가 난다.

ValueError: could not convert string to float

이러한 에러를 해결하기 위해 범주형 변수를 수치로 변경해야 한다.

예를 들면, 아래와 같은 데이터가 있다고 하자.

이 DataFrame을 보면, 성별(sex)과 지역(region)의 경우 string으로 되어 있음을 알 수 있다. 이러한 경우 선형회귀를 돌리기 위해 데이터를 넣으면, 위에서 언급한 에러가 나타난다.

이를 해결하기 위해서, sex의 경우 female은 0, male은 1로 변경하여 수치로 만들 수 있다.

그렇다면 region의 경우는?
(참고로 위의 데이터 region은 ['northeast', 'northwest', 'southeast', 'southwest'] 이렇게 4개의 값을 가지고 있다.)

어떻게 생각하면 순서대로 0, 1, 2, 3으로 변환하여 바꾸면된다고 생각할 수 있다.
하지만 이 값들은 서로 간 서열이 있거나 거리가 달라서는 안되는 값들이다.

이런경우 One-Hot Encoding을 쓰게 된다.

범주형 변수가 가지는 값 만큼 변수를 만들고 자기 위치만 1, 나머지는 0을 만들어서 변환하는 것이다. region의 경우에는

'northeast':[1,0,0,0]
'northwest':[0,1,0,0]
'southeast':[0,0,1,0]
'southwest':[0,0,0,1] 로 변환하면 된다.

이렇게 변환하기 위한 방법으로 두 가지를 들 수 있다.

pandas의 get_dummies()함수를 이용하거나

import pandas

 region = pd.get_dummies(DataFrame['region'])


sklearn의 OneHotEncoder를 이용하면 된다.

from sklearn.preprocessing import OneHotEncoder onehot = OneHotEncoder(handle_unknown='ignore') region = df['region'].to_numpy().reshape(-1,1) onehot.fit(region) onehot.transform(region).toarray()

좋은 웹페이지 즐겨찾기