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()
Author And Source
이 문제에 관하여(One-Hot Encoding), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@siyeon-hwang/One-Hot-Encoding저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)