2

对不起,我确实觉得我忽略了一些非常明显的东西。

但是怎么会发生以下情况:

$ 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 生成它从训练文件中学到的原始标签,因为它完全忽略了测试文件中的标签。

但是,它似乎重现了测试文件中的标签?!?

显然,我在这里做错了什么……但是什么?

4

2 回答 2

5

如果您在 --csoaa 中仅指定一个标签(即使在 -t 测试模式下),这意味着对于此示例只有该标签是“可用的”,因此无法预测其他标签。这是与 --oaa 的另一个区别(您始终只指定正确的标签)。请参阅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
于 2014-02-14T12:46:30.553 回答
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!

于 2014-02-14T14:31:42.133 回答