반응형
1. 데이터 인코딩
머신러닝 알고리즘은 문자열 데이터 속성을 입력 받지 않으며 모든 데이터는 숫자형으로 표현되어야 한다. 문자형 카테고리형 속성은 모두 숫자값으로 변환/인코딩 되어야한다.
머신러닝에서 사용되는 인코딩식 방식은 대표적으로 레이블 인코딩, 원-핫 인코딩 2가지 있다.
2. 레이블 인코딩
문자열코드를 숫자형으로 변환하는 방법이다.
아래에서처럼 TV는 0, 냉장고는 1 이런식으로 각각의 항목이 고유 번호를 부여 받도록 한다.
사이킷런에서는 레이블 인코딩을 적용하기 위한 LabelEncoder 클래스를 제공하고 fit(), transform()을 이용하여 변환한다.
⎷ 실습
사용 방법은 LabelEncoder를 객체로 생성한 후 , fit( ) 과 transform( ) 으로 label 인코딩 수행한다.
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([4, 5, 2, 0, 1, 1, 3, 3]))
▶ Out
인코딩 변환값: [0 1 4 5 3 3 2 2]
인코딩 클래스: ['TV' '냉장고' '믹서' '선풍기' '전자렌지' '컴퓨터']
디코딩 원본 값: ['전자렌지' '컴퓨터' '믹서' 'TV' '냉장고' '냉장고' '선풍기' '선풍기']
3. 원-핫 인코딩
피처 값의 유형에 따라 새로운 피처를 추가해 고유 값에 해당하는 컬럼에만 1을 표시하고 나머지 컬럼에는 0을 표시하는 방식이다.
사이킷런에서는 원-핫 인코딩을 위해 OneHotEncoder 클래스를 제공하고 있고 원-핫 인코딩을 적용하기 위해서는 먼저 문자열을 숫자열로 변환이 되어야한다.
사이킷런의 OneHotEncoder 클래스를 이용하여 원-핫 인코딩을 적용하기 위해서는 다음과 같이 수행한다.
- fit(), transform()을 이용하여 변환한다(인자로 2차원 ndArray 입력필요)
- Sparse(희소) 배열 형태로 변환되므로 toarray()를 적용하여 다시 Dense형태로 변화되어야함.
사이킷런의 OneHotEncoder 클래스를 이용한 원-핫 인코딩은 아래와 같다.
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)
▶ Out
원-핫 인코딩 데이터
[[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)
추가로 판다스를 이용할 경우에도 원-핫 인코딩을 적용할 수 있다.
- 판다스의 getr_dummies(DataFrame)을 이용
import pandas as pd
df = pd.DataFrame({'item':['TV','냉장고','전자렌지','컴퓨터','선풍기','선풍기','믹서','믹서'] })
pd.get_dummies(df)
▶ Out
반응형
'ML > 사이킷런' 카테고리의 다른 글
사이킷런을 이용한 타이타닉 생존자 예측 (1) | 2024.02.13 |
---|---|
데이터전처리- 스케일링 (1) | 2024.02.06 |
GridSearchCV이란? (1) | 2024.01.24 |
파라미터와 하이퍼파라미터 (0) | 2024.01.23 |
K폴드 교차 검증이란? (0) | 2024.01.02 |