2016-07-25 25 views
0

我正在嘗試使用Vowpal Wabbit來執行二進制分類,即給定的特徵值vw會將其分類爲1或0.這就是我如何將訓練數據格式化的方法。Vowpal Wabbit不能預測二進制值,可能是過度訓練?

1 'name | feature1:0 feature2:1 feature3:48 feature4:4881 ... 
-1 'name2 | feature1:1 feature2:0 feature3:5 feature4:2565 ... 
etc 

我有大約30,000個1個數據點和大約3,000個數據點。在創建模型後,我有100個1和100個數據點用於測試。這些測試數據點被默認列爲1.這是我如何格式化預測集:

1 'name | feature1:0 feature2:1 feature3:48 feature4:4881 ... 

從我的VW文件的理解,我需要爲使用物流或鉸鏈loss_function二元分類。這是我如何被創建模型:

vw -d ../training_set.txt --loss_function logistic/hinge -f model 

這就是我如何努力預測:

vw -d ../test_set.txt --loss_function logistic/hinge -i model -t -p /dev/stdout 

然而,這就是我遇到的問題。如果我使用鉸鏈損失函數,所有的預測值都是-1。當我使用邏輯損失函數時,可以得到5到11之間的任意值。數據點的總體趨勢應該是0,較低的值是5-7,對於數據點應該是1,從6開始-11。我究竟做錯了什麼?我查閱了文件,並檢查了一些關於大衆的文章,看看我能否確定我的問題是什麼,但我無法弄清楚。理想情況下,我會得到一個0,1的值,或一個介於0和1之間的值,這對應於大衆認爲結果有多強。任何幫助,將不勝感激!

+0

你是否洗過培訓數據? –

+0

不,這是必需的嗎?我認爲數據的順序沒有任何重要性,只有特徵值。 – stormcynk

+0

如果訓練數據首先包含所有負面示例,然後是所有正面​​示例,則在線學習(默認情況下用於vw,除非指定'--bfgs')將無法訓練任何內容,並且只會預測(幾乎)只有正面標籤。訓練數據的隨機混洗可以防止這種常見的陷阱。如果你的訓練數據已經被洗牌了(或者他們遵循了一些自然的時間順序),這並不是嚴格要求。 –

回答

0

獨立於您的工具和/或特定算法,您可以使用「學習曲線」,並訓練/交叉驗證/測試分裂來診斷您的算法,並確定您的問題是什麼。診斷你的問題,你可以申請調整你的算法,例如,如果你發現你有後過擬合就可以申請一些操作,如:

  1. 添加正規化
  2. 獲取更多的訓練數據
  3. 降低複雜性的型號
  4. 消除多餘的功能。

您可以參考Andrew Ng。有關此主題的更多詳情,請訪問YouTube上的「針對機器學習的建議」視頻。

+0

感謝您的建議,您是否發現任何明顯錯誤的方式設置我的數據或我的方式是否正在訓練和運行與大衆的預測? – stormcynk

1
  • 如果輸出應該只是-1+1標籤,使用--binary選項(測試時)。
  • 如果輸出應該是介於0和1之間的實數,請使用--loss_function=logistic --link=logistic。訓練時需要loss_function=logistic,所以數字可以解釋爲概率。
  • 如果輸出應該是-1和1之間的實數,請使用--link=glf1

如果您的訓練數據不平衡,例如正面例子比正面例子多10倍,但是你的測試數據是平衡的(並且你想在這個測試數據上得到最好的損失),將正面例子的importance weight設置爲0.1(因爲有10倍多的正面例子)。

相關問題