14.3.1 用向量表示資料

wesun發表於2013-12-06

怎麼用向量表示可分類資料?表14.1中總結了幾種辦法。

表14.1 將可分類資料編碼為向量的辦法

辦法 收益 成本 用途

每個單詞、類別或連續值用一個Vector 沒有衝突,易於實現逆處理 需要過兩次(一次設定單元(cell),一次設定值),並且向量的長度可能不同。 將Lucene索引匯出為Vector用作聚類

將Vector隱含地表示為詞彙袋(bags ofwords) 過一次,沒衝突 難以使用線性代數原始型別,難以表示連續值,並且必須將資料格式化為特殊的非向量形式 用在樸素貝葉斯(naive Bayes)中

用特徵雜湊 過一次,向量大小提前固定,並適用於 有特徵衝突,結果模型解釋起來可能需要點技巧 在OnlineLogisticRegression和其它SGD學習演算法中

Mahout中的不同分類器用的是表14.1中的不同辦法。我們來看一下如何將類單詞型、類文字型和類別型值編碼為向量。

  • 每個單元一個單詞

將可分類資料編碼為Vector的一種辦法是遍歷兩次訓練資料:一次確定必須的Vector尺寸,並構建一個詞典記錄每個特徵放在Vector中的什麼位置;另外一次轉換資料。這種方式可以用簡單的表示來編碼訓練和測試示例:每個連續值,和每個唯一的詞彙或類別型中的類別,類文字和類單詞資料都可以賦值給向量表示中的唯一位置中。

這種方式明顯的劣勢在於要過兩次訓練資料,所以可能導致分類器的訓練計算成本高昂,對於特別大的資料集來說這真是個問題。

Mahout中的大多數聚類演算法用的都是這種過兩次的辦法。

  • 將向量作為詞彙袋

另外一種辦法是帶上特徵名稱或名稱加上類別,單詞,或文字值,而不是Vector物件。這些方法主要是用在Mahout分類器之類的樸素貝葉斯和輔助的樸素貝葉斯中。 這種辦法的優勢是可以不用詞典,但這也意味著很難用Mahout的線性代數能力獲取Vector物件已知和一致的長度。

  • 特徵雜湊

基於SGD的分類器無需預先確定向量的大小,只要簡單挑一個合理的大小,並把訓練資料預置進那個大小的向量中。這種辦法被稱為特徵雜湊。預置是用連續變數變數名的雜湊,或變數名和類別名或類別單詞,類文字或類單詞資料的雜湊來選擇一個或幾個位置。

這種特徵雜湊的辦法有明顯的優勢,需要的記憶體更少,也可以少過一次訓練資料,但對向量進行逆向工程來確定對映到向量位置的原始特徵也更加困難。

這是因為多個特徵可能會雜湊到同一個位置。每個特徵的向量都比較大,或者有多個位置,這不是精確性問題,但可能會對理解分類器做什麼造成比較大的困難。

相關文章