ユニヒートコーディング(One-Hot Encoding)

3167 ワード

【コンセプト】


One-hot encodingは、1つの残りがすべて0のnビットシーケンスしか存在しない.二元ベクトルとも呼ばれ、二元は中に0と1しかない.通常、ステートマシンのステータスを記述するために使用されます.

【用途】


離散型フィーチャーの処理に使用します.離散的特徴をone‐hot符号化によりヨーロッパ空間にマッピングすることにより,特徴間の距離と類似度をさらに計算し,回帰,分類,クラスタリングなどの機械学習アルゴリズムで用いることができる.離散型データとは何か、ヨーロッパ式空間、特徴距離と特徴類似度については、学生が自分で勉強してください.ここでは展開しません.

【適用】


機械学習では,訓練に用いるデータサンプルの集合を分類し,プログラムが理解できるベクトルに変換する必要がある.
例えば、私は3つの画像サンプルを持っていて、画像の内容を認識しなければなりません.その中には、「sex」「male」「female」「hair」「short」「long」「bare」「hair color」「black」「gold」「blue」の3つの次元が含まれています.
サンプルのセットは次のとおりです.
id
sex
hair
hair color
1
male
short
black,gold
2
female
long
black,blue
3
male
short
gold
4
male
bare
black
注意:hair colorこの欄に複数の値があるのは、この人が髪の一部を染めた可能性があるからです.他の次元も同じで、写真の中に何人かの人がいて、美人がたくさんいるかもしれません.

【コード】


scikit-learn docsが提供するコードの例を次に示します.
>>> from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder()
#  , 
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])  
OneHotEncoder(categorical_features='all', dtype=<... class="hljs-string">'numpy.float64'>,
       handle_unknown='error', n_values='auto', sparse=True)
#fit 3 , [0,1,0,1] , [0,1,2,0] , 。
>>> enc.n_values_
array([2, 3, 4])
#  , 022+32+3+4
>>> enc.feature_indices_
array([0, 2, 5, 9])

# ,0 -> [10], 0 [0,1], , , 。
#        1 -> [0,1,0]
#        1 -> [0,1,0,0]
>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1.,  0.,  0.,  1.,  0.,  0.,  1.,  0.,  0.]])