機械学習のOne Hot Encoding

3030 ワード

My existence is not without reason!I know that i could be a quite a different person!
私の存在はきっと意味がある!私は私が変わった人になることを知っています!

基本概念


One-Hot符号化は、1ビット有効符号化とも呼ばれ、主にNビット状態レジスタを用いてN個の状態を符号化し、各状態は独立したレジスタビットであり、いつでも1ビットしか有効ではない.
One-Hot符号化は分類変数をバイナリベクトルとして表す.これは、まず分類値を整数値にマッピングする必要があります.その後、各整数値はバイナリベクトルとして表され、整数のインデックスを除いてゼロ値であり、1としてマークされる.

整数符号化とOne-Hot符号化


「red」と「green」の値を持つラベルシーケンスがあると仮定します.「red」の整数値を0、「green」の整数値を1に割り当てることができます.これらの数字を常にこれらのラベルに割り当てる限り、整数符号化と呼ばれます.
各整数値を表すバイナリベクトルを作成できます.2つの可能な整数値の場合、ベクトルの長さは2です.0に符号化された「red」ラベルは、0番目のインデックスが値1としてマークされるバイナリベクトル[1,0]で表される.次に、1として符号化された「green」ラベルは、最初のインデックスが1としてマークされるバイナリベクトル[0,1]を使用する.
シーケンスがある場合:
‘red’,‘red’,‘green’
整数符号化で表すことができます.
0,0,1
One-Hotコードは次のとおりです.
[1,0],[1,0],[0,1]

コーディングの利点


One hot符号化はデータの分類をより正確に行い,多くの機械学習アルゴリズムはデータ分類に直接使用できない.データのカテゴリは数値に変換する必要があります.分類の入力変数と出力変数は同じです.
整数符号化は、温度「冷」(0)および「熱」(1)のラベルなど、カテゴリ間の自然関係の問題に適用される.
関係がない場合、問題が発生する可能性があります.一例はラベルの「犬」と「猫」かもしれません.これらの場合,ネットワークをより表現力を持たせ,可能なラベル値ごとに確率的な数字を提供したい.これは、問題のあるネットワークモデリングに役立ちます.出力変数がone-hot符号化を使用する場合、単一のラベルよりも正確な予測のセットを提供することができる.

Python実現

# -*- coding: UTF-8 -*-

"""
Created on 18-1-2

@summary: One Hot  

@author: dreamhome
"""

import numpy as np

from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelEncoder

data = ["a", "b", "c", "d", "b", "c"]

test = np.array(data)
print test

#  
label_encoder = LabelEncoder()
integer_result = label_encoder.fit_transform(test)
# One-Hot 
one_hot_encoder = OneHotEncoder()
# One-Hot 
integer_result1 = integer_result.reshape(len(integer_result), 1)
one_hot_result = one_hot_encoder.fit_transform(integer_result1)

print " :"
print integer_result
print "One-Hot "
print one_hot_result.toarray()

#  
inverted = label_encoder.inverse_transform([np.argmax(one_hot_result[4, :])])
print inverted