Programming Blog

레이블 인코딩(Label Encoding), 원 핫 인코딩(One-Hot Encoding) 본문

머신러닝/데이터 전처리

레이블 인코딩(Label Encoding), 원 핫 인코딩(One-Hot Encoding)

Go-ong 2020. 11. 11. 14:17

기본적으로 사이킷런의 머신러닝 알고리즘은 문자열 값을 입력 값으로 허락하지 않으므로, 모든 문자열 값들을 숫자 형으로 인코딩하는 전처리 작업 후에 머신러닝 모델에 학습을 시켜야합니다.
인코딩 하는 방식에는 레이블 인코딩(Lable encoding)과 원-핫 인코딩(One Hot Encoding)이 있습니다.


레이블 인코딩(Label Encoding)

from sklearn.preprocessing import LabelEncoder

fruits=['사과', '바나나', '수박']

# LabelEncoder 객체 생성 후 fit()과 transform()으로 LabelEncoder 수행
encoder = LabelEncoder()
encoder.fit(fruits)

labels = encoder.transform(fruits)

# * encoder.classes_ : 객체의 인코딩 전 원래 값
# 리스트 나열 기준은 영어 > 한글 순이고, 내림차순으로 정렬
print('before : ', encoder.classes_) # before :  ['사과', '바나나', '수박']
print('after : ', labels) # after :  [1 0 2]

* 문제점 : 숫자값으로 변환되어 예측 성능 저하 > 숫자의 크고 작음에 대한 특성 작용 ex)1+2=3


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

속성(column)값의 유형에 따라 새로운 속성을 추가해 고유 값에 해당하는 컬럼에만 1을 표시하고 해당하지 않는 컬럼에는 0을 표시합니다.

from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
import numpy as np

fruits=['사과', '바나나', '수박', '체리', '수박', '체리', '메론']

encoder = LabelEncoder()
encoder.fit(fruits)

labels = encoder.transform(fruits)
labels = labels.reshape(-1,1)

# One-Hot Encoding
oneHot_encoder = OneHotEncoder()
oneHot_encoder.fit(labels)
oneHot_labels = oneHot_encoder.transform(labels)
print('oneHot_labels array')
print(oneHot_labels.toarray())
print('-----------------------------')
print('oneHot_labels shape')
print(oneHot_labels.shape)
print('-----------------------------')

test_df = pd.DataFrame({'fruit':fruits})
test_df

pd.get_dummies(test_df)

One-Hot Encoding 실행 전

 

Comments