AI기록장
[ML] 데이터 인코딩 (Label / One-Hot Encoding) 본문
❖ 데이터 인코딩
머신러닝 알고리즘은 문자열 데이터 속성을 입력받지 않으며, 모든 데이터는 숫자형으로 표현 되어야함
사람과 컴퓨터가 데이터를 읽는 시각이 다르기 떄문에 컴퓨터가 분석하기 쉬운 값으로 변환해줘한다.
인코딩의 종류
레이블(Label)인코딩
원-핫(One-Hot)인코딩
인코딩 적용 방법
레이블(Label) 인코딩
: LabelEncoder 클래스, fit() 과 transform()을 이용하여 변환
원-핫(One-Hot) 인코딩
: OneHotEncoder 클래스
fit()과 transform()을 이용하여 반환, 인자로 2차원 ndarray 입력 필요
Sparse 배열 형태로 변환되므로 toarray()를 적용하여 다시 Dense 형태로 변환되어야함
->pd.get_dummies(DataFrame)을 이용!
▷주의해야할 부분은 레이블 인코딩은 1차원으로 들어가도 무방
하지만, 원-핫 인코딩은 반드시 2차원 ndarray로 들어가야함
-> np.array(Data).reshape(-1, 1)
[레이블 인코딩(Label encoding)]
from sklearn.preprocessing import LabelEncoder
items=['TV','냉장고','전자렌지','컴퓨터','선풍기','선풍기','믹서','믹서']
# LabelEncoder를 객체로 생성한 후 , fit( ) 과 transform( ) 으로 label 인코딩 수행.
encoder = LabelEncoder()
encoder.fit(items)
labels = encoder.transform(items)
print('인코딩 변환값:',labels)
인코딩 변환값: [0 1 4 5 3 3 2 2]
print('인코딩 클래스:',encoder.classes_)
인코딩 클래스: ['TV' '냉장고' '믹서' '선풍기' '전자렌지' '컴퓨터']
encoder.classes_를 사용하면 Encoding된 값을 이전에 어떤 값으로 데이터에 들어왔는지 확인할 수 있음
print('디코딩 원본 값:',encoder.inverse_transform([4, 5, 2, 0, 1, 1, 3, 3]))
디코딩 원본 값: ['전자렌지' '컴퓨터' '믹서' 'TV' '냉장고' '냉장고' '선풍기' '선풍기']
숫자형으로 Encoding 된 값들을 다시 문자형으로 inverse 시켜줌
[원-핫 인코딩(One-Hot encoding)]
One-Hot encoding 은 피처 값의 유형에 따라 새로운 피처를 추가해 고유 값에 해당하는 컬럼에만 1을 표시하고나머지 컬럼에는 0을 표시하는 방식
메모
- 원-핫 인코딩은 데이터가 2차원이여야함
- fit 해준 encoder 값은 스팔스 행렬이라 우리가 아닌 tolist형태로 바꿔줘야 알아볼 수 잇음.
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로 변환한 결과는 희소행렬(Sparse Matrix)이므로 toarray()를 이용하여 밀집 행렬(Dense Matrix)로 변환.
print('원-핫 인코딩 데이터')
print(oh_labels.toarray())
print('원-핫 인코딩 데이터 차원')
print(oh_labels.shape)
원-핫 인코딩 데이터
[[1. 0. 0. 0. 0. 0.]
[0. 1. 0. 0. 0. 0.]
[0. 0. 0. 0. 1. 0.]
[0. 0. 0. 0. 0. 1.]
[0. 0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0. 0.]
[0. 0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0. 0.]]
원-핫 인코딩 데이터 차원
(8, 6)
위에서 진행한 one-hot-encoding을 pd.get_dummies로 바로 진행할 수 있음
import pandas as pd
df = pd.DataFrame({'item':['TV','냉장고','전자렌지','컴퓨터','선풍기','선풍기','믹서','믹서'] })
pd.get_dummies(df)
item_TV | item_냉장고 | item_믹서 | item_선풍기 | item_전자렌지 | item_컴퓨터 | |
---|---|---|---|---|---|---|
0 | 1 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 0 | 1 | 0 |
3 | 0 | 0 | 0 | 0 | 0 | 1 |
4 | 0 | 0 | 0 | 1 | 0 | 0 |
5 | 0 | 0 | 0 | 1 | 0 | 0 |
6 | 0 | 0 | 1 | 0 | 0 | 0 |
7 | 0 | 0 | 1 | 0 | 0 | 0 |
참고 [파이썬 머신러닝 완벽 가이드]
'ML > 개념정리' 카테고리의 다른 글
[ML] 결정 트리(Decision_Tree) (1) | 2023.11.01 |
---|---|
[ML] 머신러닝 성능 평가 지표(분류) (0) | 2023.09.12 |
[ML] 데이터 스케일링(Data Scaling) (0) | 2023.09.11 |
[ML] 교차 검증(Cross Validation) 및 GridSearchCV 정리 (1) | 2023.09.07 |
[ML] Feature Engineering [Feature Selection] (0) | 2023.07.11 |