2014-02-13 54 views
2

對不起,我確實覺得我忽略了一些非常明顯的東西。Vowpal Wabbit對多標籤分類的預測

但是,如何才能以下發生:

$ cat myTrainFile.txt 
1:1 |f 1:12 2:13 
2:1 |f 3:23 4:234 
3:1 |f 5:12 6:34 

$ cat myTestFile.txt 
14:1 |f 1:12 2:13 
14:1 |f 3:23 4:234 
14:1 |f 5:12 6:34 

$ vw --csoaa 3 -f myModel.model --compressed < myTrainFile.txt 
final_regressor = myModel.model 
... 
... 

$ vw -t -i myModel.model -p myPred.pred < myTestFile.txt 
only testing 
Num weight bits = 18 
... 
... 

$ cat myPred.pred 
14.000000 
14.000000 
14.000000 

所以測試文件是相同的列車文件,但標籤。 因此,我希望vw能夠生成從火車文件中學習到的原始標籤,因爲它完全忽略了測試文件中的標籤。

但是,它似乎再現了測試文件中的標籤?!?

很明顯,我在這裏做了一些完全錯誤的事情......但是什麼?

回答

5

如果您在--csoaa中指定了一個標籤(即使在-t測試模式下),這意味着該示例中只有該標籤「可用」,因此不能預測其他標籤。 這是與--oaa(你總是指定正確的標籤)的另一個區別。 見https://groups.yahoo.com/neo/groups/vowpal_wabbit/conversations/topics/2949

如果對於任何測試示例,所有標籤都「可用」(可能),則必須始終在每行上包含所有標籤。 如果您只想獲得 - 預測(如果您不需要計算測試損失,則不需要包含標籤的成本)。 所以你myTestFile.txt應該是這樣的:

1 2 3 |f 1:12 2:13 
1 2 3 |f 3:23 4:234 
1 2 3 |f 5:12 6:34 

和你myTrainFile.txt應該是這樣的:

1:0 2:1 3:1 |f 1:12 2:13 
1:1 2:0 3:1 |f 3:23 4:234 
1:1 2:1 3:0 |f 5:12 6:34 
+0

確實。而已!非常感謝。我不會很快就想到...... ;-) – Tom

0

因此,爲了完整起見,這裏是如何做工作:

$ cat myTrainFile.txt 
1:1.0 |f 1:12 2:13 
2:1.0 |f 3:23 4:234 
3:1.0 |f 5:12 6:34 

$ cat myTestFile.txt 
1 2 3 |f 1:12 2:13 
1 2 3 |f 3:23 4:234 
1 2 3 |f 5:12 6:34 

$ vw -t -i myModel.model -p myPred.pred < myTestFile.txt 
only testing 
... 

$ cat myPred.pred 
2.000000 
1.000000 
2.000000 

所以有點驚訝也許沒有任何例子被正確分類,但這是另一個問題。

Thanks @Martin Popel!

+0

嘗試在訓練集中添加'--passses = 20'。它可能在1次運行3次觀測後不會收斂。 – Zach

+0

您的意思是: 'vw --csoaa 3 -f myModel.model --compressed --passes = 20 --cache_file = myCache Tom

相關問題