본문 바로가기

Lecture ML

머신러닝 강좌 #4] 데이터 전처리 - 레이블 인코딩, 원-핫 인코딩

반응형

데이터 전처리(Data Preprocessing)은 머신러닝을 하는 데 있어 매우 중요합니다. 머신러닝에서는 결손값, 즉 NaN, Null값은 허용되지 않습니다. 따라서 이러한 Null값은 고정된 다른 값으로 변환해야 합니다. Null값을 어떻게 처리해야 할지는 경우에 따라 다릅니다.

 

Feature값 중 Null값이 얼마 되지 않는다면 피처의 평균값 등으로 간단하게 대체될 수 있으나 Null값이 대부분이라면 오히려 해당 피처는 드롭하는 것이 더 좋습니다. 이렇게 사이킷런의 머신러닝 알고리즘은 문자열 값을 입력 값으로 허용하지 않습니다. 그래서 모든 문자열 값은 인코딩 돼서 숫자 형으로 변환해야 합니다. 

 

카테고리형 피처는 코드값으로 표현하는 게 더 이해하기 쉬울 것 같습니다. 반면 텍스트형 피처는 피처 벡터화등의 기법으로 벡터화하거나 불필요한 피처라고 판단되면 삭제하는 게 좋습니다.

 


레이블 인코딩

대표적인 인코딩 방식은 레이블 인코딩과 원-핫 인코딩이 있습니다. 레이블 인코딩은 카테고리 피처를 코드형 숫자 값으로 변환하는 것입니다.

from sklearn.preprocessing import LabelEncoder

items = ['TV', '냉장고', '전자레인지', '컴퓨터', '선풍기', '믹서', '믹서']

encoder = LabelEncoder()
encoder.fit(items)
labels = encoder.transform(items)
print('인코딩 변환값', labels)
print('인코딩 클래스', encoder.classes_)
print('디코딩 원본값', encoder.inverse_transform([4,5,2,3,4,0]))

#인코딩 변환값 [0 1 4 5 3 2 2]

 


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

 

원-핫 인코딩은 피처 값의 유형에 따라 새로운 피처를 추가해 고유 값에 해당하는 칼럼에만 1을 표시하고 나머지 칼럼에는 0을 표시하는 방식입니다. 즉, 행 형태로 돼 있는 피처의 고유 값을 열 형태로 차원을 변환한 뒤, 고유 값에 해당하는 칼럼에만 1을 표시하고 나머지 칼럼에는 0을 표시합니다. 

from sklearn.preprocessing import OneHotEncoder
import numpy as np

items = ['TV', '냉장고', '전자레인지', '컴퓨터', '선풍기', '믹서', '믹서']
encoder = LabelEncoder()
encoder.fit(items)
labels = encoder.transform(items)
labels = labels.reshape(-1,1)

oh_encoder = OneHotEncoder()
oh_encoder.fit(labels)
oh_labels = oh_encoder.transform(labels)
print(oh_labels.toarray())
print(oh_labels.shape)

 

 

import pandas as pd
df = pd.DataFrame({'items':['TV', '냉장고', '전자레인지', '컴퓨터', '선풍기', '믹서', '믹서']})
df_dummary = pd.get_dummies(df)
print(df_dummary)
반응형