본문 바로가기
DNN with Keras/Machine Learning

원핫 인코딩 (One-Hot-Encoding)

by goatlab 2023. 7. 27.
728x90
반응형
SMALL

Encoding Categorical Values as Dummies

 

범주형 값을 부호화하는 전통적인 방법은 더미 변수로 만드는 것이다. 이 기법은 one-hot-encoding이라고도 한다. csv를 다운 받는다.

 

import pandas as pd

df = pd.read_csv('jh-simple-dataset.csv', na_values = ['NA', '?'])

pd.set_option('display.max_columns', 7)
pd.set_option('display.max_rows', 5)

display(df)

 

area 열은 숫자가 아니므로 원핫 인코딩으로 인코딩해야 한다. 영역 수와 개별 값을 표시한다. 이 경우 영역 범주형 변수에는 4개의 값만 있다.

 

areas = list(df['area'].unique())
print(f'Number of areas : {len(areas)}')
print(f'Areas : {areas}')
Number of areas : 4
Areas : ['c', 'd', 'a', 'b']

 

area 열에는 4개의 고유한 값이 있다. 이 더미 변수를 인코딩하기 위해 각각 영역 중 하나를 나타내는 4개의 열을 사용할 것이다. 각 행에 대해 하나의 열은 1의 값을 가지며 나머지는 0이다. 이러한 이유로 이러한 유형의 인코딩을 원핫 인코딩이라고 부르기도 한다. 다음 코드는 "a"에서 "d"까지의 값을 인코딩하는 방법을 보여준다. 값 A는 [1,0,0,0]이 되고 값 B는 [0,1,0,0,0]이 된다.

 

dummies = pd.get_dummies(['a', 'b', 'c', 'd'], prefix = 'area')
print(dummies)

 

이제 실제 열을 인코딩할 수 있다.

 

dummies = pd.get_dummies(df['area'], prefix = 'area')
print(dummies[0:10]) # show the first 10

 

새로운 더미 / 하나의 핫 인코딩된 값이 유용하려면 해당 값을 데이터 세트에 다시 병합해야 한다.

 

df = pd.concat([df, dummies], axis = 1)

 

area 열을 인코딩하기 위해 더미들을 데이터 프레임에 다시 병합할 필요가 있다.

 

pd.set_option('display.max_columns', 0)
pd.set_option('display.max_rows', 10)

display(df[['id', 'job', 'area' , 'income', 'area_a', 'area_b', 'area_c', 'area_d']])

 

일반적으로 데이터 프레임이 신경망에 대해 전체 값이 숫자가 되도록 하는 것이 목표이기 때문에 원래 area 열을 제거한다.

 

pd.set_option('display.max_columns', 0)
pd.set_option('display.max_rows', 5)

df.drop('area', axis = 1, inplace = True)
display(df[['id', 'job', 'income', 'area_a', 'area_b', 'area_c', 'area_d']])

728x90
반응형
LIST