いちゆうこうコーディング
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"])