1. 程式人生 > >資料處理——One-Hot Encoding

資料處理——One-Hot Encoding

一、One-Hot Encoding

One-Hot編碼,又稱為一位有效編碼,主要是採用位狀態暫存器來對個狀態進行編碼,每個狀態都由他獨立的暫存器位,並且在任意時候只有一位有效。     在實際的機器學習的應用任務中,特徵有時候並不總是連續值,有可能是一些分類值,如性別可分為“male”和“female”。在機器學習任務中,對於這樣的特徵,通常我們需要對其進行特徵數字化,如下面的例子: 有如下三個特徵屬性:
  • 性別:["male","female"]
  • 地區:["Europe","US","Asia"]
  • 瀏覽器:["Firefox","Chrome","Safari","Internet Explorer
    "]
對於某一個樣本,如["male","US","Internet Explorer"],我們需要將這個分類值的特徵數字化,最直接的方法,我們可以採用序列化的方式:[0,1,3]。但是這樣的特徵處理並不能直接放入機器學習演算法中。

二、One-Hot Encoding的處理方法

    對於上述的問題,性別的屬性是二維的,同理,地區是三維的,瀏覽器則是思維的,這樣,我們可以採用One-Hot編碼的方式對上述的樣本“["male","US","Internet Explorer"]”編碼,“male”則對應著[1,0],同理“US”對應著[0,1,0],“Internet Explorer”對應著[0,0,0,1]。則完整的特徵數字化的結果為:[1,0,0,1,0,0,0,0,1]。這樣導致的一個結果就是資料會變得非常的稀疏。

三、實際的Python程式碼

from sklearn import preprocessing

enc = preprocessing.OneHotEncoder()
enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])

array = enc.transform([[0,1,3]]).toarray()

print array

結果:[[ 1.  0.  0.  1.  0.  0.  0.  0.  1.]]