2014-02-13 53 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

相关问题