본문 바로가기

& 프로그래밍/& 머신러닝

Categorical Data Encoding(데이터 전처리 작업)

머신러닝 알고리즘은 문자열 값을 그대로 인식하지 못한다

컴퓨터는 숫자로 구성되어 있는 프로그램이기 때문에 문자를 숫자로 변환시켜줘야 하는 것이다

이를 '데이터 전처리 작업'이라고 부른다

 

머신러닝 학습에 최적화된 수를 제공하기 위해 대개 많이 사용하는 2가지 인코딩 방법을 소개한다

 

1. Label Encoding(레이블 인코딩)

 - 문자열 값을 일괄적인 숫자 값으로 변환시켜준다

 - 다만 학습데이터로 사용하기에는 예측성능이 떨어지기 때문에 추천하진 않는다

 

# 변환시킬 값 : X의 ['Gender']

from sklearn.preprocessing import LabelEncoder # sklearn 모듈에서 레이블인코더를 불러온다
labelencoder_Gender = LabelEncoder() # 불러온 레이블인코더를 변수에 저장한다
X['Gender'] = labelencoder_Gender.fit_transform(X['Gender']) # 변환작업

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

 - 문자열 유형에 따라 고유값을 할당하여 0과 1로 표현하도록 변환시켜준다

 - 레이블 인코딩을 1차작업으로 거쳐야 한다

 

from sklearn.compose import ColumnTransformer

from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer([('encoder',OneHotEncoder(), [0] ) ], remainder= 'passthrough' )
X = np.array(ct.fit_transform(X),dtype = np.float)

특정 컬럼(열)값을 지정하고 전체를 변환시키기 때문에 remainder설정을 'passthrough'로 잡아주어야만 엄한녀석이 변환되지 않고 통과한다

 

이 글을 작성하면서 알게된 새로운 함수가 하나 있는데....

 

pandas에서 제공하는 get_dummies라는 녀석이다

굳이 위처럼 장황하게 작성할 필요도 없이 딱 한문장이면 끝나는거 같다

import pandas as pd

pd.get_dummies(df) # df = 변환시킬 대상

get_dummies는 한번도 해본적 없는데 이번에 테스트해봐야겠다