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:中國
所以最終得到的每句話的特徵向量就是:
我愛中國 -> 1,1,0,0,1
爸爸媽媽愛我 -> 1,1,1,1,0
爸爸媽媽愛中國 -> 0,1,1,1,1
那麼這樣做的優點和缺點都有什麼?
優點:解決了分類器處理離散資料困難的問題
一定程度上起到了擴充套件特徵的作用(上例中從3擴充套件到了9)
缺點:one-hot是乙個詞袋模型,不考慮詞與詞之間的順序問題,而在文字中,次的順序是乙個很重要的問題
one-hot是基於詞與詞之間相互獨立的情況下的,然而在多數情況中,詞與詞之間應該是相互影響的
one-hot得到的特徵是離散的,稀疏的
onehot編碼解釋
one hot編碼,又稱為一位有效編碼,主要是採用n位狀態暫存器來對n個狀態進行編碼,每個狀態都由他獨立的暫存器位,並且在任意時候只有一位有效。one hot編碼是分類變數作為二進位制向量的表示。這首先要求將分類值對映到整數值。然後,每個整數值被表示為二進位制向量,除了整數的索引之外,它都是零值,它...
one hot 編碼的實現
對 mnist 手寫字元識別 資料集進行手寫數字分類,屬於多分類問題,手寫數字 0 9,共 10 類,從 mnist.pkl.gz 檔案中解析得到的字元影象 28 28 的標籤 label,或者目標值 只有 1 維,進行 one hot 編碼可將其編碼為 10 維,數字 0,編碼為 1,0,0,0,...
特徵工程 One hot編碼
建模時,常常會遇到有些特徵變數代表的是型別或型別。比如城市 city 它的取值有san francisco,new york和seattle三種。代表三個城市。import pandas as pd from sklearn import linear model df pd.dataframe c...