機器學習之獨熱編碼(One-Hot)詳解(代碼解釋)

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.]]
相關文章
相關標籤/搜索