One-Hot編碼,又稱爲一位有效編碼,主要是採用N位狀態寄存器來對N個狀態進行編碼,每一個狀態都由他獨立的寄存器位,而且在任意時候只有一位有效。算法
One-Hot編碼是分類變量做爲二進制向量的表示。這首先要求將分類值映射到整數值。而後,每一個整數值被表示爲二進制向量,除了整數的索引以外,它都是零值,它被標記爲1。數組
聽概念的話顯得比較複雜,咱們來看一個例子。機器學習
假設咱們有一羣學生,他們能夠經過四個特徵來形容,分別是:學習
舉個例子,用上述四個特徵來描述小明同窗,即「男生,初一,來自二中」,若是特徵類別是有序的話,咱們可以用表示順序的數組表示測試
即「男生,初一,來自一中」 ==> [0,0,1]編碼
可是這樣的特徵處理並不能直接放入機器學習算法中,由於類別之間是無序的spa
這時候就能夠用獨熱編碼的形式來表示了,咱們用採用N位狀態寄存器來對N個狀態進行編碼,拿上面的例子來講,就是:code
性別 | [「男」,「女」] | N=2 | 男:1 0orm 女:0 1blog |
年級 | [「初一」,「初二」,「初三」] | N=3 | 初一:1 0 0 初二:0 1 0 初三:0 0 1 |
學校 | [「一中」,「二中」,「三中」,「四中」] | N=4 | 一中:1 0 0 0 二中:0 1 0 0 三中:0 0 1 0 四中:0 0 0 1 |
所以,當咱們再來描述小明的時候,就能夠採用 [1 0 1 0 0 0 1 0 0]
不少人在介紹獨熱編碼的時候,都引用了下面這段代碼,可是解釋的比較模糊,下面詳細解釋一下。
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]]
這裏一共有四個數據,三種特徵,是那四個呢,咱們列出矩陣
第一種 | 第二種 | 第三種 | |
第一個 | 0 | 0 | 3 |
第二個 | 1 | 1 | 0 |
第三個 | 0 | 2 | 1 |
第四個 | 1 | 0 | 2 |
咱們豎着看,能夠看出第一種特徵中只有0、1兩類,第二組有0,、一、2三類,第三種有0、一、二、3四類,所以分別能夠用二、三、4個狀態類來表示。
enc.transform就是將[0,1,3]這組特徵轉換成one hot編碼,toarray()則是轉成數組形式。
第一個數爲0,對應第一種特徵則爲 1 0;
第二個數爲1,對應第二種特徵則爲 0 1 0;
第三個數爲3,對應第三種特徵則爲 0 0 0 1。
因此最後的輸出爲:[[ 1 0 0 1 0 0 0 0 1]]
一樣的,當咱們拿小明的表述[0,0,1]來測試的時候,獲得了與第一個例子相同的結果。
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,0,1]]).toarray() #這裏使用一個新的數據來測試 print(array) [[1. 0. 1. 0. 0. 0. 1. 0. 0.]]