【知識相關】機器學習之獨熱編碼(One-Hot)詳解(代碼解釋)


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

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

聽概念的話顯得比較復雜,我們來看一個例子。

假設我們有一群學生,他們可以通過四個特征來形容,分別是:

  • 性別:[“男”,“女”]
  • 年級:[“初一”,“初二”,“初三”]
  • 學校:[“一中”,“二中”,“三中”,“四中”]

舉個例子,用上述四個特征來描述小明同學,即“男生,初一,來自二中”,如果特征類別是有序的話,我們能夠用表示順序的數組表示

即“男生,初一,來自一中”   ==>   [0,0,1]

但是這樣的特征處理並不能直接放入機器學習算法中,因為類別之間是無序的

這時候就可以用獨熱編碼的形式來表示了,我們用采用N位狀態寄存器來對N個狀態進行編碼,拿上面的例子來說,就是:

性別 [“男”,“女”] N=2

男:1 0

女:0 1

年級 [“初一”,“初二”,“初三”] 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,、1、2三類,第三種有0、1、2、3四類,因此分別可以用2、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.]]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM