いちゆうこうコーディング

4054 ワード

簡単な紹介


性別が特徴のデータのセットがあります.性別である以上、その値は明らかに2つの選択しかなく、男性(1で表す)か女性(0で表す)かのいずれかである.独熱符号化はこの特徴を2つの特徴に変えることである:男性であり、女性である.私は男で、私の特徴は[1,0]、1は私が男であることを代表して、0は私が女ではないことを代表します.同様に、女性の特徴は[0,1]となる.

用途


なぜ独熱符号化を使うのですか?黄色、赤、緑などの特徴が色であると仮定します.独熱符号化を用いなければ,黄色を0,緑を1,赤を2で表すと同様である.数学的に見ると、それらの間の距離は異なり、0と1の距離は明らかに0と2の距離より小さいが、黄色と赤の関係は緑より近いとは思えない.独熱符号化を採用すると,黄色は[1,0,0,...]、赤は[0,1,0,...]、緑は[0,0,1,...]となり,それらの類似度は同様であり,これは機械学習アルゴリズムにとって重要である.

使用方法


性別を例にとると、二人がいて、一人は男で一人は女です.彼らの元の属性は[1]と[0]です.
from sklearn.preprocessing import OneHotEncoder #  sklearn
enc = OneHotEncoder()
test=[[1],[0]]
enc.fit(test) #  

完成しました.こんなに簡単です.予測してみましょう
enc.transform([[1]]).toarray()

出力は
array([[ 0.,  1.]])

少し简単ですね.もっと复雑で、色の属性を加えて、A男性、赤い服[1,1]B男性、黄色い服[1,0]C女性、绿の服[0,2]の3人の属性に基づいて独热コードを行うと仮定します.コードに成功したら、D女性、赤の服がどのようにコードされるかを见てみましょう.
test2=[[1,1],[1,0],[0,2]]
enc.fit(test2) 
enc.transform([[0,1]]).toarray()

Out:
array([[ 1.,  0.,  0.,  1.,  0.]])

女性、男性、黄色、赤、緑の5つのデータがあります.これはA,B,Cの3人から得られた法則である.1代表は、0代表ではなく、結果が女性、赤であることがわかりやすい.

Pandas


依然として年齢と色を例にとると、私はすでにデータをたくさん持っていて、どのように迅速に符号化しますか.まず表を作る
import pandas as pd 
from pandas import Series,DataFrame
df=pd.DataFrame({'sex': [1, 1, 0, 1], 'color': [1, 0, 2, 1]})
df

Out:
   color  sex
0      1    1
1      0    1
2      2    0
3      1    1

In:
s1 = pd.get_dummies(df['sex'], prefix = 'sex')
s1

Out:
   sex_0  sex_1
0      0      1
1      0      1
2      1      0
3      0      1

In:
s2 = pd.get_dummies(df['color'], prefix = 'color')
s2

Out:
Out[21]: 
   color_0  color_1  color_2
0        0        1        0
1        1        0        0
2        0        0        1

In:
pd.concat([s1, s2],axis=1)

Out:
   sex_0  sex_1  color_0  color_1  color_2
0      0      1        0        1        0
1      0      1        1        0        0
2      1      0        0        0        1
3      0      1        0        1        0

複数の特徴を同時に符号化することもでき、結果は同じである
pd.get_dummies(df, columns=["color","sex"])