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 ... 表示输出预测)。此外,您是否要 testpredict 也不清楚,因为它说 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 保留每个Nth 示例(默认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

表明 45 应该是 --nn 的良好参数,在 11 个示例中的 1 个保留子集上产生 0.08888 的损失。

【讨论】:

以上是关于vowpal-wabbit:使用多次通过、保持和保持期来避免过度拟合?的主要内容,如果未能解决你的问题,请参考以下文章

在画布中多次旋转一行

TCP 长连接短连接和保活机制

Android进程回收机制和保活方案

TCP/IP具体解释学习笔记--TCP的坚持和保活定时器

研究生开学需要准备的事宜(准研究生和保研必看)

如何在 C# .NET 中保持 TCP 连接打开并执行多次写入/读取?