我正在嘗試使用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之間的值,這對應於大衆認爲結果有多強。任何幫助,將不勝感激!
你是否洗過培訓數據? –
不,這是必需的嗎?我認爲數據的順序沒有任何重要性,只有特徵值。 – stormcynk
如果訓練數據首先包含所有負面示例,然後是所有正面示例,則在線學習(默認情況下用於vw,除非指定'--bfgs')將無法訓練任何內容,並且只會預測(幾乎)只有正面標籤。訓練數據的隨機混洗可以防止這種常見的陷阱。如果你的訓練數據已經被洗牌了(或者他們遵循了一些自然的時間順序),這並不是嚴格要求。 –