one-hot編碼理解
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編碼理解