반응형

<참고: http://cafe.daum.net/flowlife/S2Ul/19?q=keras >

 

One-hot Encoding (원핫 인코딩)

 

글. 오상문 sualchi@daum.net

 

여러 종류로 나뉜 자료를 각각 구분하기 위하여, 고유한 자료 표현을 하는 방법 중의 하나이다. 예를 들어 사과, 배, 감, 포도라는 네 가지 대상을 구분해야 한다고 할 때, 서로 독립적으로 고유한 표현을 할 수 있도록 아래처럼 표현할 수 있다(벡터 표현).

 

사과 : [1,0,0,0]배    : [0,1,0,0]감    : [0,0,1,0]포도 : [0,0,0,1]

 

[참고] 핫 인코딩 한계

단어 수가 늘어나면 벡터 저장 공간도 커지며, 각 자료 항목의 유사성을 표현할 수 없다.

 

 

케라스는 정수 인코딩 결과를 입력으로 받아서 원핫 인코딩을 처리하는 to_categorical() 기능을 제공한다.

from keras_preprocessing.text import Tokenizer
from keras.utils import to_categorical

 

text= '사과 배 감 포도'

 

# 단어별 분리
t = Tokenizer()

# [text] 대신 text를 넣으면 글자 단위 인코딩
t.fit_on_texts([text]) 

print(t.word_index)    

 

# 단어 집합 크기 출력 

size = len(t.word_index)        
print('size : ',  size)  # 4

 

# 시퀀스 자료로 변경
x = t.texts_to_sequences([text])[0] 
print(x)   

 

#원핫인코딩 구조로 변경
x = to_categorical(x, num_classes=size + 1) # 단어 집합 크기 +1
print(x)

 

[실행 결과]

{'사과': 1, '배': 2, '감': 3, '포도': 4}
size :  4
[1, 2, 3, 4]
[[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]

 

<이상>

 

반응형

+ Recent posts