문자열은 입력 값으로 허용되지 않기 때문에 문자열을 숫자 형으로 변환하는 과정을 거쳐야 한다.
레이블 인코딩 (Label encoding)
사이킷런에서는 레이블 인코딩을 LabelEncoder라는 클래스를 이용하여 구현한다.
fit(), transform 을 통해 아이템을 숫자로 인코딩한다.
예시
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([3,1,2,0,1,1]))
output:
인코딩 변환값: [0 1 2 3]
인코딩 클래스: ['TV' '냉장고' '전자레인지' '컴퓨터']
디코딩: ['컴퓨터' '냉장고' '전자레인지' 'TV' '냉장고' '냉장고']
labels : 인코딩 변환값이 저장
encoder.classes_ : 인코딩 값에 대응되는 string 형태의 원본 레이블이 저장
inverse_transform() : 인코딩된 값을 디코딩 하여 원본 데이터로 되돌려주는 함수
단점
- 특정 알고리즘에서는 숫자의 크기라는 특성 때문에 예측 성능이 떨어질 수 있다.
이는 숫자를 레이블이 아니라 연속된 의미의 숫자로서 인식하기 때문이다. 따라서 선형회귀 등의 알고리즘에는 적용할 수 없다.
-> 주로 트리 계열의 모델에서 사용된다.
원-핫 인코딩(One-Hot Encoding)
레이블 인코딩의 문제점을 해결하기 위해 나왔다.
피처 값의 유형에 따라 새로운 피처들을 모두 정의하고 해당하는 레이블을 1로 표시 나머지는 0으로 표시한다.
사이킷런에서는 이 인코딩을 OneHotEncoder이라는 클래스를 이용하여 구현한다.
이 함수를 사용하기 위해서는 먼저 1. 문자열 값이 입력값을 숫자형으로 변경해주어야 하며 2. 2차원의 데이터가 필요하다.
예시를 통해 원-핫 인코딩을 알아보도록 하자
1. 레이블 인코딩을 이용하여 문자열을 숫가형으로 변환해준다.
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelEncoder
import numpy as np
items=['TV','냉장고','전자레인지','컴퓨터']
encoder = LabelEncoder()
encoder.fit(items)
labels = encoder.transform(items)
2. 2차원 데이터 배열로 변환해준다.
labels = labels.reshape(-1,1)
3. 원핫 인코딩을 수행한다.
oh_encoder = OneHotEncoder()
oh_encoder.fit(labels)
oh_labels = oh_encoder.transform(labels)
print('원-핫 인코딩 데이터')
print(oh_labels.toarray())
print('원-핫 인코딩 데이터 차원')
print(oh_labels.shape)
output:
원-핫 인코딩 데이터
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
원-핫 인코딩 데이터 차원
(4, 4)
get_dummies()
출처 입력
이 함수를 이용하면 문자형을 숫자로 변환하고 2차원 데이터로 변환해주는 과정을 거칠 필요가 없다
예시
import pandas as pd
df = pd.DataFrame({'item':['TV','냉장고','전자레인지','컴퓨터']})
pd.get_dummies(df)
output :
심지어 보기 좋게 비쥬얼라이징도 해준다.
출처 : 파이썬 머신러닝 완벽 가이드
'인공지능 > 데이터 분석' 카테고리의 다른 글
[파이썬 머신러닝 완벽가이드] 평가 (정확도, 오차 행렬, 정밀도, 재현율) (0) | 2021.08.16 |
---|---|
[사이킷런] 데이터 전처리 2. 피처스케일링 (0) | 2021.08.16 |
[사이킷런] GridSearchCV : 교차 검증 + 하이퍼 파라미터 튜닝 (0) | 2021.08.16 |
[사이킷런] 과적합의 문제와 교차 검증 모델(KFold, StratifiedKFold, cross_val_score) (0) | 2021.08.16 |
[사이킷런] train_test_split, DecisionTreeClassifier 체험 (0) | 2021.08.16 |