본문 바로가기
인공지능/데이터 분석

[사이킷런] 데이터 전처리 1. 데이터 인코딩

by julysein 2021. 8. 16.
728x90

 

문자열은 입력 값으로 허용되지 않기 때문에 문자열을 숫자 형으로 변환하는 과정을 거쳐야 한다.

 

레이블 인코딩 (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 :

 

 

심지어 보기 좋게 비쥬얼라이징도 해준다.

 

출처 : 파이썬 머신러닝 완벽 가이드

 

728x90