对不起,我觉得我忽视了一些非常明显的事情。
但是如何发生以下情况:
$ 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能够生成从火车文件中学到的原始标签,因为它完全忽略了测试文件中的标签。
但是,它似乎从测试文件中重现了标签?!?
显然,我在这里做了一些完全错误的事......但是什么?
答案 0 :(得分:5)
如果在--csoaa中仅指定一个标签(即使在-t测试模式下),则表示此示例中只有该标签“可用”,因此无法预测其他标签。 这是与--oa(您总是指定正确的标签)的另一个区别。 请参阅https://groups.yahoo.com/neo/groups/vowpal_wabbit/conversations/topics/2949。
如果任何测试示例的所有标签都“可用”(可能),则必须始终在每行上包含所有标签。 使用-t,如果您只想获得--predictions(如果您不需要vw来计算测试损失),则不需要包含标签的成本。 所以你的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
答案 1 :(得分: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
所以可能没有一个例子被正确归类有点令人惊讶,但这是另一个问题。
谢谢@Martin Popel!