2014-10-20 16 views

回答

5

需要二進制單熱編碼用於將分類數據提供給具有標準內核的線性模型和SVM。

例如,您可能有一個星期幾的功能。然後你爲每個人創建一個熱點編碼。

1000000 Sunday 
0100000 Monday 
0010000 Tuesday 
... 
0000001 Saturday 

特徵散列主要用於允許參數向量的顯着存儲壓縮:將高維輸入向量散列爲較低維特徵空間。現在,所得到的分類器的參數向量可以存在於低維空間中,而不是存在於原始輸入空間中。這可以用作降低維度的一種方法,因此通常您希望以較高的存儲收益來降低性能。

wikipedia的例子是一個很好的例子。假設你有三個文件:

  • 約翰喜歡看電影。
  • 瑪麗也喜歡電影。
  • 約翰也喜歡足球。

使用書包模型,您首先創建以下文檔到單詞模型。 (每一行都是一個文檔,矩陣中的每個條目都表示文檔中是否出現一個單詞)。

enter image description here

在這個過程中的問題是,這樣的字典佔用大量的存儲空間,並擴大規模作爲訓練集增長。

使用散列技巧的特徵向量化器不是維護字典,而是通過將散列函數h應用於考慮中的項目中的特徵(例如單詞)來構建預定義長度的向量,然後使用散列值直接作爲特徵索引並在這些索引處更新結果向量。

假設您生成3個以下散列的散列特徵。 (您將k不同的散列函數應用於原始功能並計算散列值撞擊存儲桶的次數)。

 bucket1 bucket2 bucket3 
doc1: 3   2  0 
doc2: 2   2  0 
doc3: 1   0  2 

現在,您已成功將9維的要素轉換爲3維。

功能哈希的一個更有趣的應用是做個性化。原始文件feature hashing包含一個很好的例子。

想象一下,您要設計一個垃圾郵件過濾器,但需要爲每個用戶定製。這樣做的天真方法是爲每個用戶訓練一個單獨的分類器,這對於訓練(訓練和更新個性化模型)或服務(將所有分類器保存在內存中)是不可行的。下面一個聰明的方式說明:

enter image description here

  • 每個令牌被複制,而另一份由一個唯一的用戶ID拼接每個字個體化。 (請參閱USER123_NEUUSER123_Votre)。
  • 詞語模型包現在包含常用關鍵字和特定用途關鍵字。
  • 然後將所有單詞散列成文檔被訓練和分類的低維特徵空間。

現在回答你的問題:

是。一個熱點編碼應該是第一位的,因爲它將一個分類特徵轉換爲二進制特徵,使其可以通過線性模型消耗。 只要有利於使用壓縮的特徵空間,就可以將它們應用於相同的數據集。請注意,如果您可以容忍原始特徵維度,則不需要功能哈希。例如,在常見的數字識別問題中,例如,MINST,圖像由28×28個二進制像素表示。輸入維度只有784.對於這種情況來說,確保功能散列不會有任何好處。

相關問題