DeepLearining

Label Encoding and One Hot Encoding

Pro.Dev 2017. 10. 29. 16:18
반응형

숫자가 아닌 단어나 글자를,   숫자로 바꿔줘야 딥러닝이 학습할 수 있다.


이럴때, 글자를 숫자로 바꿔주는 것을 Label Encoding 이다.


예를들어, 데이터셋에서 어떤 컬럼이 국가명으로 되어있다고 하자.


... country name (컬럼명)


...      KR


...      US


...      UK


...      CN



위의 국가 코드를 숫자로 바꿔주기 위해서는 다음과 같이 한다.


1
2
3
4
5
6
7
8
from sklearn.preprocessing import LabelEncoder
 
# encode class values as integers
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)


그러면, KR => 0, US => 1, UK => 2, CN => 3  이런식으로 숫자로 바뀐다.



여기에 한가지 더, One Hot Encoding 이 있다. 


Supervised Learning 의 분류(Classification) 문제에서,  기계에게 학습 시킬 Label 값이 숫자  이외로 되어 있을 경우, 숫자로 먼저 만들어 주는 것이 위에서 한 Label Encoding 이고,  위처럼 한 후에, Loss를 계산하기 쉽게 만들어 주기 위해 벡터의 딱 한개의 요소만 1 이고, 나머지 요소는 모두 0 인 벡터로 만들어 주는 것이 OneHotEncoding 이다.


위의 예에서,  KR => 0, US => 1, UK => 2, CN => 3   이렇게 바뀌었는데, 


이 값들이 학습(Training) 시킬 y값 즉, Label 값(supervised learning) 이라면, 이 값들은 벡터로 바뀌어야 한다.


나라명이 전부 4개만 나오므로, 4개로 분류하는 문제에 해당하기 때문에, 벡터의 elements 갯수는 4개가 되며,


KR  => ( 1 , 0, 0, 0 )


US  => ( 0, 1, 0, 0 )


UK  => ( 0, 0, 1, 0 )


CN  => ( 0 , 0, 0, 1 )


이렇게 만들어 주어야 한다. 이렇게 해주는것이 원 핫 인코딩 이다.


1
2
3
4
from keras.utils import np_utils
 
# convert integers to dummy variables (i.e. one hot encoded)
one_hot_y = np_utils.to_categorical(encoded_Y)
cs



반응형