1. 程式人生 > >Python: 進行one-hot編碼

Python: 進行one-hot編碼

在機器學習中,one-hot編碼是對分類特徵進行預處理的常用手段。本篇部落格講解了如何利用sklearn來進行one-hot編碼。

舉一個簡單的例子:

>> from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder()
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])  
OneHotEncoder(categorical_features='all', dtype=<... 'numpy.float64'>,
       handle_unknown='error', n_values='auto', sparse=True)
>>> enc.n_values_
array([2, 3, 4])
>>> enc.feature_indices_
array([0, 2, 5, 9])
>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1.,  0.,  0.,  1.,  0.,  0.,  1.,  0.,  0.]])

首先確認一下輸入樣本[[0, 0, 3], [1, 1, 0], [0, 2, 1],[1, 0, 2]],

這個輸入樣本表示該input共有四個樣本,三個特徵,也就是三列。這裡我們觀察可以發現對於第一個feature,對應第一列,它的取值有0,1兩個屬性值,第二列有0,1,2三個值,第三個有0,1,2,3四個取值。那麼這裡的enc.n_values_就是每個屬性列不同屬性值的個數,所以輸出可以看到分別是2,3,4。而enc.feature_indices_是對enc.n_values_的一個累加。

enc.transform([[0, 1, 1]]).toarray()

這一句目標是將[0, 1, 1]這個樣本轉化為基於上面四個輸入的one-hot編碼。那麼可以得到:

第一個屬性值0,對應第一列:0->10

第二個屬性值1,對應第二列:1->010

第三個屬性值1,對應第三列:1->0100

所以[0, 1, 1]對應以上輸入的one-hot編碼為

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