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个的子集。