1. 程式人生 > >one-hot編碼理解

one-hot編碼理解

tps bsp 其他 相互 來源 順序 clas class str

one-hot是比較常用的文本特征特征提取的方法。

one-hot編碼,又稱“獨熱編碼”。其實就是用N位狀態寄存器編碼N個狀態,每個狀態都有獨立的寄存器位,且這些寄存器位中只有一位有效,說白了就是只能有一個狀態。

下面舉例說明:

有四個樣本,每個樣本有三種特征:

    feature1   feature2   feature3
sample1   1      4     3
sample2   2      3     2
sample3   1      2     2
sample4   2      1     1
上圖用十進制數對每種特征進行了編碼,feature1有兩種可能的取值,feature2有4種可能的取值,feature3有3種可能的取值。比如說feature3有3種取值,或者說有3種狀態,那麽就用3個狀態位來表示,以保證每個樣本中的每個特征只有1位處於狀態1,其他都是0。

1->001

2->010

3->100

其他的特征也都這麽表示:

    feature1   feature2   feature3
sample1   01     1000    100
sample2   10     0100    010
sample3   01     0010    010
sample4   10     0001    001
這樣,4個樣本的特征向量就可以這麽表示:

sample1 -> [0,1,1,0,0,0,1,0,0]

sample2 -> [1,0,0,1,0,0,0,1,0]

sample3 -> [0,1,0,0,1,0,0,1,0]

sample4 -> [1,0,0,0,0,1,0,0,1]

接下來看看怎麽應用one-hot:

one-hot在特征提取上屬於詞袋模型(bag of words),假設語料庫中有三句話:

我愛中國
爸爸媽媽愛我
爸爸媽媽愛中國
首先,將語料庫中的每句話分成單詞,並編號:

1:我 2:愛 3:爸爸 4:媽媽 5:中國

然後,用one-hot對每句話提取特征向量:(圖來源於網絡)

技術分享圖片

技術分享圖片

技術分享圖片

所以最終得到的每句話的特征向量就是:

我愛中國 -> 1,1,0,0,1
爸爸媽媽愛我 -> 1,1,1,1,0
爸爸媽媽愛中國 -> 0,1,1,1,1
那麽這樣做的優點和缺點都有什麽?

優點:

解決了分類器處理離散數據困難的問題
一定程度上起到了擴展特征的作用(上例中從3擴展到了9)
缺點:

one-hot是一個詞袋模型,不考慮詞與詞之間的順序問題,而在文本中,次的順序是一個很重要的問題
one-hot是基於詞與詞之間相互獨立的情況下的,然而在多數情況中,詞與詞之間應該是相互影響的
one-hot得到的特征是離散的,稀疏的

one-hot編碼理解