1. 程式人生 > 實用技巧 >機器學習:資料預處理之獨熱編碼(One-Hot)

機器學習:資料預處理之獨熱編碼(One-Hot)

前言

在機器學習演算法中,我們經常會遇到分類特徵,例如:人的性別有男女,祖國有中國,美國,法國等。
這些特徵值並不是連續的,而是離散的,無序的。通常我們需要對其進行特徵數字化。

那什麼是特徵數字化呢?例子如下:

  • 性別特徵:["男","女"]

  • 祖國特徵:["中國","美國,"法國"]

  • 運動特徵:["足球","籃球","羽毛球","乒乓球"]

假如某個樣本(某個人),他的特徵是這樣的["男","中國","乒乓球"],我們可以用 [0,0,4] 來表示,但是這樣的特徵處理並不能直接放入機器學習演算法中。因為類別之間是無序的(運動資料就是任意排序的)。

什麼是獨熱編碼(One-Hot)?

One-Hot編碼,又稱為一位有效編碼,主要是採用N位狀態暫存器來對N個狀態進行編碼,每個狀態都由他獨立的暫存器位,並且在任意時候只有一位有效。

One-Hot編碼是分類變數作為二進位制向量的表示。這首先要求將分類值對映到整數值。然後,每個整數值被表示為二進位制向量,除了整數的索引之外,它都是零值,它被標記為1。

One-Hot實際案例

就拿上面的例子來說吧,性別特徵:["男","女"],按照N位狀態暫存器來對N個狀態進行編碼的原理,咱們處理後應該是這樣的(這裡只有兩個特徵,所以N=2):

男 => 10

女 => 01

祖國特徵:["中國","美國,"法國"](這裡N=3):

中國 => 100

美國 => 010

法國 => 001

運動特徵:["足球","籃球","羽毛球","乒乓球"](這裡N=4):

足球 => 1000

籃球 => 0100

羽毛球 => 0010

乒乓球 => 0001

所以,當一個樣本為["男","中國","乒乓球"]的時候,完整的特徵數字化的結果為:

[1,0,1,0,0,0,0,0,1]

下圖可能會更好理解:

One-Hot在python中的使用

from sklearn import preprocessing  
   
enc = preprocessing.OneHotEncoder()  
enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])  #
這裡一共有4個數據,3種特徵 array = enc.transform([[0,1,3]]).toarray() #這裡使用一個新的資料來測試 print array # [[ 1 0 0 1 0 0 0 0 1]]

結果為 1 0 0 1 0 0 0 0 1