有一組資料,其中有個特徵是性別。既然是性別,那它的值顯然只有兩個選擇,要麼男性(用1表示)要麼女性(用0表示)。
獨熱編碼就是將這乙個特徵變成兩個特徵:是男性、是女性。
我是男的,我的特徵就變成了 [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 ]
在這三人的屬性的基礎上進行獨熱編碼,編碼成功後,看看d 女性、紅色衣服會被編碼成什麼樣子
test2=[[1,1],[1,0],[0,2]]
enc.fit(test2)
enc.transform([[0,1]]).toarray()
out:
array([[ 1., 0., 0., 1., 0.]])
有五列資料,分別代表:女性、男性、黃色、紅色、綠色。這是從a、b,c三人中得到的規律。
1代表是,0代表不是,很容易看出結果表示的是 女性、紅色。
依舊以年齡和顏色為例,我已經有了一堆資料,怎樣快速地編碼呢。
先做乙個**
import pandas as pd
from pandas import series,dataframe
df=pd.dataframe()
df
out:
color ***01
1101
2203
11
in:
s1 = pd.get_dummies(df['***'], prefix = '***')
s1
out:
***_0 ***_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:
***_0 ***_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","***"])
One Hot encoder獨熱編碼
ref 1 什麼是獨熱碼 獨熱碼,在英文文獻中稱做 one hot code,直觀來說就是有多少個狀態就有多少位元,而且只有乙個位元為1,其他全為0的一種碼制。在機器學習中對於離散型的分型別的資料,需要對其進行數位化比如說性別這一屬性,只能有男性或者女性或者其他這三種值,如何對這三個值進行數位化表達...
獨熱編碼函式
想用自己的資料進行獨熱編碼,一開始沒用官方的程式。from sklearn import preprocessing enc preprocessing.onehotencoder 想用這個函式的可以參考博主 我找的是github裡的乙個程式 可以參考下。貼上 def one hot y n cla...
獨熱編碼 One Hot Eocode
假設現在我們要對5張手寫數字進行分類,這些數字的標籤labels的範圍是0 9,形成 5,的行向量,為 5,4,3,8,7 labels 5,4,3,8,7 num classes 10 batch size tf.size labels labels表示的標籤,5張有5個標籤。batch size...