vowpal-wabbit:使用多次通过、保持和保持期来避免过度拟合?
Posted
技术标签:
【中文标题】vowpal-wabbit:使用多次通过、保持和保持期来避免过度拟合?【英文标题】:vowpal-wabbit: use of multiple passes, holdout, & holdout-period to avoid overfitting? 【发布时间】:2017-08-29 20:01:27 【问题描述】:我想使用很棒的vowpal wabbit tool
使用以下命令训练用于类别分类的二元 sigmoidal 前馈网络:
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
) 的评论。
所以我的问题是如何知道训练通过次数,以免得到重新训练的模型?
附:我应该使用holdout_period
参数吗?如何?
【问题讨论】:
【参考方案1】:问题中的测试命令不正确。它没有输入(-p ...
表示输出预测)。此外,您是否要 test 或 predict 也不清楚,因为它说 test
但使用的命令有 -p ...
测试 意味着您拥有标记数据并且您正在评估模型的质量。严格来说:predict 意味着你没有标签,所以你实际上无法知道你的预测有多好。实际上,您还可以预测保留的、标记的数据(通过忽略它们来假装它没有标签),然后评估这些预测有多好,因为您实际上有标签。
一般:
如果你想进行二分类,你应该使用-1, 1
中的标签并使用--loss_function logistic
。 --binary
这是一个独立选项,意味着您希望预测是二元的(给您更少的信息)。
如果你已经有一个单独的带有标签的测试集,你不需要坚持。
vw
中的保持机制旨在替换测试集并避免过度拟合,它仅在使用多次通过时才相关,因为在一次通过中所有示例都有效地保持-出去;每个下一个(尚未见过的)示例都被视为 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
th 示例(默认N
是10,但您可以使用--holdout_period <N>
显式覆盖它,如上所示)。在这种情况下,您可以指定更多的通过次数,因为vw
会在保留集的损失开始增长时自动提前终止。
您会注意到您提前终止,因为vw
将打印如下内容:
passes used = 5
...
average loss = 0.06074 h
表示在提前停止之前实际上只使用了N
中的 5 次,并且示例的保留子集上的错误为 0.06074(尾随的 h
表明这是保留损失)。
如您所见,通过次数和holdout-period是完全独立的选项。
要改进模型并获得更多信心,您可以使用其他优化,改变holdout_period,尝试其他--nn
参数。您可能还想检查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
表明 4
或 5
应该是 --nn
的良好参数,在 11 个示例中的 1 个保留子集上产生 0.08888 的损失。
【讨论】:
以上是关于vowpal-wabbit:使用多次通过、保持和保持期来避免过度拟合?的主要内容,如果未能解决你的问题,请参考以下文章