原文:https://blog.csdn.net/zcc_0015/article/details/76595447
已知三個feature,三個feature分別取值如下:
feature1=[“male”, “female”]
feature2=[“from Europe”, “from US”, “from Asia”]
feature3=[“uses Firefox”, “uses Chrome”, “uses Safari”, “uses Internet Explorer”]
如果做普通數據處理,那么我們就按0,1,2,3進行編號就行了。例如feature1=[0,1],feature2=[0,1,2],feature3=[0,1,2,3]。
那么,如果某個樣本為[“male”,“from Asia”, “uses Chrome”],它就可以表示為[0,2,1]。
以上為普通編碼方式。
獨熱編碼(One-hot)換了一種方式編碼,先看看百科定義的:
獨熱編碼即 One-Hot 編碼,又稱一位有效編碼,其方法是使用N位狀態寄存器來對N個狀態進行編碼,每個狀態都有它獨立的寄存器位,並且在任意時候,其中只有一位有效。
例如對六個狀態進行編碼:
自然順序碼為 000,001,010,011,100,101
獨熱編碼則是 000001,000010,000100,001000,010000,100000
通過以上可以看到,獨熱編碼每一個碼的總的位數取決於狀態的種類數,每一個碼里的“1”的位置,就代表了哪個狀態生效。
還是回到我們最開始的例子,那么我們將它換成獨熱編碼后,應該是:
feature1=[01,10]
feature2=[001,010,100]
feature3=[0001,0010,0100,1000]
所以,對於前邊樣本[“male”,“from Asia”, “uses Chrome”],經過獨熱編碼后,它應該為:
[01,00, 000,000,100, 0000,0010,0000,0000]
注:上邊用空格,以便看的更清晰。
以上的獨熱編碼可以寫成簡寫形式: [1,0, 0,0,1, 0,1,0,0]
最后,摘抄下獨熱編碼的好處:
由於分類器往往默認數據數據是連續的,並且是有序的,但是在很多機器學習任務中,存在很多離散(分類)特征,因而將特征值轉化成數字時,往往也是不連續的, One-Hot 編碼解決了這個問題。
並且,經過獨熱編碼后,特征變成了稀疏的了。這有兩個好處,一是解決了分類器不好處理屬性數據的問題,二是在一定程度上也起到了擴充特征的作用。