파이썬 머신러닝ML

파이썬 LabelEncoding (종속변수를 숫자_Class_로 변환), One hot Encoding

양기호니 2022. 11. 7. 23:11
728x90
반응형

혼자 공부하려고 정리했어요~

 

LabelEncoding

분류모델에 적용할 수 있도록 y값을 겹치지 않는 숫자로 바꿔준다.

import numpy as np
from sklearn.preprocessing import LabelEncoder
from keras.utils import np_utils

e = LabelEncoder()
e.fit(["유튜브", "블로그", "블로그", "티스토리", "카카오"])
print(f'분류된 Class : {e.classes_}') #분류된 class 확인
print(f'분류된 Class의 번호 : {e.transform(e.classes_)}') #분류된 class의 번호 확인
label = e.transform(["블로그", "티스토리", "카카오","유튜브"])
print(label) #새로 만든 문자 list를 번호로
print(e.inverse_transform([0, 0, 2, 3, 1])) #번호를 원래 데이터로 변환


## 결과물 ##
['블로그' '유튜브' '카카오' '티스토리']
[0 1 2 3]
[0 3 2 1]
['블로그' '블로그' '카카오' '티스토리' '유튜브']

 

 

One hot Encoding

 

겹치지 않는 y값을 행,열의 바꿔준다. 

0,1  ->   [[1. 0.]

              [0. 1.]]

 

loss = categorical_crossentropy에 적용하여 분류할 수 있다.

#One hot Encoding, Decoding
# label = e.transform(["블로그", "티스토리", "카카오","유튜브"]
one_hot = np_utils.to_categorical(label) 
print(one_hot)
print(np.argmax(one_hot, axis=1))
print(np.argmax(one_hot)) #axis를 넣어주지 않으면 첫번째 행만 읽어낸다.
print(e.inverse_transform(np.argmax(one_hot, axis=1)))

## 결과물 ##
[[1. 0. 0. 0.]
 [0. 0. 0. 1.]
 [0. 0. 1. 0.]
 [0. 1. 0. 0.]] # print(one_hot)
[0 3 2 1]       # print(np.argmax(one_hot, axis=1))
0               # print(np.argmax(one_hot))
['블로그' '티스토리' '카카오' '유튜브'] #print(e.inverse_transform(np.argmax(one_hot, axis=1)))

 

반응형