레이블 인코딩
카테고리 피처를 코드형 숫자 값으로 변환하는 것
from sklearn.preprocessing import LabelEncoder
items = ['TV', '냉장고', '전자레인지', '컴퓨터', '선풍기', '선풍기', '믹서', '믹서']
#LabelEncoder를 객체로 생성한 후, fit()과 transfomr()으로 레이블 인코딩 수행
encoder = LabelEncoder()
encoder.fit(items)
labels = encoder.transform(items)
print('인코딩 변환값:', labels)
print('인코딩 클래스:', encoder.classes_)
print('디코딩 원본값:', encoder.inverse_transform([4,5,2,0,1,1,3,3]))
레이블 인코딩은 선형 회귀와 같은 ML 알고리즘에는 적용하면 안된다.
트리 계열의 ML 알고리즘은 숫자의 특성을 반영하지 않으므로 사용해도 문제 없음
원-핫 인코딩(One-Hot Encoding)
레이블 인코딩과 다르게 입력값으로 2차원 데이터가 필요하다
OneHotEncoder를 이용해 변환한 값이 희소 행렬(Sparse Matrix)형태이므로 이를 다시 toarray()메서드를 이용해 밀집행렬(Dense Matrix)로 변환해야함
from sklearn.preprocessing import OneHotEncoder
import numpy as np
items = ['TV', '냉장고', '전자레인지', '컴퓨터', '선풍기', '선풍기', '믹서', '믹서']
#2차원 ndarray로 변환
items = np.array(items).reshape(-1,1)
#원-핫 인코딩 적용
oh_encoder = OneHotEncoder()
oh_encoder.fit(items)
oh_labels = oh_encoder.transform(items)
#OneHotEncoder로 변환한 결과는 희소생렬이므로 toarray()를 이용해 밀집 행렬로 변환
print('원-핫 인코딩 데이터')
print(oh_labels.toarray())
print('원-핫 인코딩 데이터 차원')
print(oh_labels.shape)
판다스에서 원-핫 인코딩을 더 쉽게 지원하는 API - get_dummies()
import pandas as pd
df = pd.DataFrame({'item':['TV', '냉장고', '전자레인지', '컴퓨터', '선풍기', '선풍기', '믹서', '믹서']})
pd.get_dummies(df)
'ML' 카테고리의 다른 글
평가 (0) | 2022.11.07 |
---|---|
타이타닉 생존자 예측 (0) | 2022.11.07 |
표준화와 정규화 (0) | 2022.11.07 |
Model Selection (0) | 2022.11.07 |
붓꽃 품종 예측하기 (0) | 2022.11.07 |