2

我想訓練二進制S形前饋網絡類別分類使用真棒vowpal wabbit tool以下命令:vowpal-wabbit:使用多次通過,堅持和堅持期以避免過度配合?

vw --binary --nn 4 train.vw -f category.model 

並對其進行測試:

vw --binary -t -i category.model -p test.vw 

但我有非常不好的結果(比較我線性svm估計器)。

我發現了一條評論,我應該使用Number of Training Passes參數(--passes arg)。

所以我的問題是如何知道培訓通行證的次數,以便獲得再培訓模型

P.S.我應該使用holdout_period的說法嗎?如何?

回答

2

問題中的測試命令不正確。它沒有輸入(-p ...指示輸出預測)。此外,如果你想測試預測因爲它說test但使用的命令有-p ...

測試意味着您已標記的數據和您在評估模型的質量,目前尚不清楚。嚴格地說:預測意味着你沒有標籤,所以你實際上不知道你的預測有多好。實際上,您也可以預測未標註的數據(假設它沒有忽視它們的標籤),然後評估這些預測的效果如何,因爲您實際上有標籤。

一般:

  • ,如果你想要做的二元分類,你應該{-1, 1}使用標籤和使用--loss_function logistic--binary這是一個獨立的選項,意思是你希望預測是二進制的(給你更少的信息)。

  • 如果您已經擁有帶標籤的單獨測試套件,則無需堅持。

vw的Holdout機構被設計用來替換所述測試設置和避免過度擬合,它是唯一的相關當多次通過在單次通過所有實例有效地持有,因爲使用;每個下一個(但看不見的)示例被視爲1)未標記用於預測,並且2)標記爲測試和模型更新。 IOW:你的火車集合也是你的測試集。

所以你可以做的多遍動車組沒有抵抗

vw --loss_function logistic --nn 4 -c --passes 2 --holdout_off train.vw -f model 

,然後測試一個單獨的模型和標記,測試設置:

vw -t -i model test.vw 

或做多次通過相同的列車集與一些持有作爲測試集

vw --loss_function logistic --nn 4 -c --passes 20 --holdout_period 7 train.vw -f model 

如果你沒有一個測試集,並且要適應,更強的通過使用多遍,你可以問vw舉行,每N個例子(默認N爲10,但你可以使用--holdout_period <N>明確地覆蓋它,如上所示)。在這種情況下,您可以指定更高的通行證數量,因爲vw將在外出集合的損失開始增加時自動提前終止。

你會發現你打提前終止,因爲vw將打印出類似這樣:

passes used = 5 
... 
average loss = 0.06074 h 

這表明只有5個N次傳遞提早終止前實際使用,並在持有了集錯誤例如是0.06074(尾隨h表示這是外出損失)。

正如你所看到的,通過次數,和持久期是完全獨立的選項。

爲了提高您的模型並獲得更多信心,您可以使用其他優化,更改holdout_period,嘗試其他​​參數。您可能還想檢查vw-hypersearch實用程序(在utl子目錄中)以幫助查找更好的超參數。

下面是關於包含在源與測試組中的一個使用vw-hypersearch的一個示例:

$ vw-hypersearch 1 20 vw --loss_function logistic --nn % -c --passes 20 --holdout_period 11 test/train-sets/rcv1_small.dat --binary 
trying 13 ............. 0.133333 (best) 
trying 8 ............. 0.122222 (best) 
trying 5 ............. 0.088889 (best) 
trying 3 ............. 0.111111 
trying 6 ............. 0.1 
trying 4 ............. 0.088889 (best) 
loss(4) == loss(5): 0.088889 
5  0.08888 

指示,要麼45應該是好的參數​​上的相應的固定產生的0.08888損失11個例子中1個的子集。