개념
- 범주형 변수를 변환할때 사용하는 인코딩 방법으로, 0 또는 1의 값을 가진 하나 이상의 새로운 특성으로 변환한다.
- 혈액형에 따른 분류할 때, 0~3이 아니라 (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1)의 형태로 나누는 것을 의미한다.
- 숫자의 크고 작음에 따른 중요도를 없애기 위하여 사용된다.
- 다중공선성 문제가 있어서, n개의 변수보다는 n-1개의 변수를 만드는 것이 좋다.
- 혈액형의 변수를 4개가 아니라 3개로 처리하여, (1, 0, 0), (0, 1, 0), (0, 0, 1), (0, 0, 0)의 형태로 나타내는 것이다.
코드
- 라이브러리 불러오기
import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from sklearn.preprocessing import OneHotEncoder from sklearn.linear_model import LinearRegression
- 데이터 불러오기
DF = sns.load_dataset('mpg') DF.info()
- 범주형으로 추정되는 데이터 분포 확인
DF['origin'].unique()
- OneHotEncoder 적용해보기
encoder = OneHotEncoder(sparse=False) df = encoder.fit_transform(DF[['origin']]) df
- OneHotEncoder 적용 후 데이터 프레임에 합쳐보기
def set_onehotencoding(df, column_name): encoder = OneHotEncoder(sparse=False) df1 = encoder.fit_transform(DF[[column_name]])[:, :-1] df = pd.concat([df, pd.DataFrame(df1, columns=["%s%i" % ("origin", i) for i in range(df1.shape[1])])], axis=1) df = df.drop(columns=[column_name], axis=1) return df
- OneHotEncoder 컬럼 분포 확인 함수
def show_columns_unique(df, search_word): columns = [column for column in df.columns if search_word in column] return df[columns].value_counts().reset_index(name='count')
- origin에 함수 적용해보기
DF = set_onehotencoding(DF, 'origin') DF.head()
- OneHotEncoder 적용된 컬럼의 분포 확인
show_columns_unique(DF, "origin")