vowpal-wabbit:使用多次通过、保持和保持期来避免过度拟合?

     2023-03-12     293

关键词:

【中文标题】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 的损失。

【讨论】:

通过不同目录多次运行python脚本的最佳方法?使用视窗

】通过不同目录多次运行python脚本的最佳方法?使用视窗【英文标题】:Bestwaytorunapythonscriptmultipletimesthroughdifferentdirectories?UsingWindows【发布时间】:2020-12-2707:04:04【问题描述】:我有一个python脚本,它在与使用sys.argv的脚本位于... 查看详情

Nginx Tornado 和 Flask - 啥是好的启动/停止脚本和保活方法

】NginxTornado和Flask-啥是好的启动/停止脚本和保活方法【英文标题】:NginxTornadoandFlask-What\'sagoodstart/stopscriptandkeep-alivemethodNginxTornado和Flask-什么是好的启动/停止脚本和保活方法【发布时间】:2012-01-2308:30:03【问题描述】:我已经... 查看详情

gatsbyjs:多次使用graphql,还是一次使用并通过上下文传递结果?

】gatsbyjs:多次使用graphql,还是一次使用并通过上下文传递结果?【英文标题】:gatsbyjs:usinggraphqlmultipletimes,oronetimeandpasstheresultsthroughcontext?【发布时间】:2019-07-1117:57:25【问题描述】:使用gatsby-node.js并以编程方式创建页面,我... 查看详情

有没有办法使用预编译的 sql 完成工作并通过 java api (bigquery) 多次运行

】有没有办法使用预编译的sql完成工作并通过javaapi(bigquery)多次运行【英文标题】:Isthereawaytomakeajobwithaprecompiledsqlandrunitmultipletimesviajavaapi(bigquery)【发布时间】:2012-08-1615:00:30【问题描述】:有没有办法使用预编译的sql完成作业... 查看详情

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

】如何在C#.NET中保持TCP连接打开并执行多次写入/读取?【英文标题】:HowtokeepaTCPconnectionopenandperformmultipleWrites/ReadsinC#.NET?【发布时间】:2021-12-1611:21:25【问题描述】:有多个帖子描述了保持TCP连接打开而不是在每次需要读取或... 查看详情

如何通过能够递归地多次使用数字来创建n个数字的所有组合[重复]

】如何通过能够递归地多次使用数字来创建n个数字的所有组合[重复]【英文标题】:howtocreateallcombinationsofnnumbersbybeingabletousenumbersmultipletimesrecursively[duplicate]【发布时间】:2022-01-1923:34:48【问题描述】:例如,我有数字0和255。我... 查看详情

通过正则表达式模式匹配使用 stringbuilder 替换多次出现的字符串

】通过正则表达式模式匹配使用stringbuilder替换多次出现的字符串【英文标题】:Replacingmutipleoccurrencesofstringusingstringbuilderbyregexpatternmatching【发布时间】:2019-11-1218:43:09【问题描述】:我们正在尝试用它们各自的“组”替换字符... 查看详情

使用 Mockito 多次调用具有相同参数的相同方法

】使用Mockito多次调用具有相同参数的相同方法【英文标题】:UsingMockitowithmultiplecallstothesamemethodwiththesamearguments【发布时间】:2022-01-1419:11:37【问题描述】:有没有办法让存根方法在后续调用中返回不同的对象?我想这样做来测... 查看详情

使用 Mockito 多次调用具有相同参数的相同方法

】使用Mockito多次调用具有相同参数的相同方法【英文标题】:UsingMockitowithmultiplecallstothesamemethodwiththesamearguments【发布时间】:2011-12-2615:42:01【问题描述】:有没有办法让存根方法在后续调用中返回不同的对象?我想这样做来测... 查看详情

simple_form 通过关联在同一个表单上多次使用相同的属性

】simple_form通过关联在同一个表单上多次使用相同的属性【英文标题】:simple_formusingsameattributemultipletimesonsameformviaassociations【发布时间】:2013-08-2317:33:33【问题描述】:是否可以在这样的一种形式上具有相同的关联?<%=f.associa... 查看详情

如何使用 Rails 5 + jQuery 保持通过 Turbolinks 提交的页面状态

】如何使用Rails5+jQuery保持通过Turbolinks提交的页面状态【英文标题】:HowtokeepstateofpagesubmittedthroughTurbolinkswithRails5+jQuery【发布时间】:2019-01-0516:16:42【问题描述】:我试图在单击另一个元素时显示/隐藏section。很简单的东西,我... 查看详情

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

当server和client进行TCP通信时,发送数据之前,需要先建立连接。数据发送完毕时,需要选择是否断开。这里就需要先认识下TCP的三次握手和四次分手机制。3次握手时 第一次握手:client端向server端发送连接请求信息:SYN=1,seq... 查看详情

如果在 PDF 表单中多次出现,Java PDFBox 不会保持字段的字体外观

】如果在PDF表单中多次出现,JavaPDFBox不会保持字段的字体外观【英文标题】:JavaPDFBoxdoesnotmaintainthefontappearenceofafieldifitappearsseverralyinaPDFForm【发布时间】:2017-06-2115:53:56【问题描述】:我需要从我的javaWeb应用程序动态填写pdf表... 查看详情

如何使用 Aurelia 通过单击内部锚链接保持在同一页面上?

】如何使用Aurelia通过单击内部锚链接保持在同一页面上?【英文标题】:HowdoIkeeponthesamepagebyclickingoninternalanchorlinks,usingAurelia?【发布时间】:2019-07-0218:27:54【问题描述】:我正在为一个项目编写样式指南,目前我希望在锚链接上... 查看详情

通过第三方服务授权后,如何使用 OAuth 2.0 保持会话? [关闭]

】通过第三方服务授权后,如何使用OAuth2.0保持会话?[关闭]【英文标题】:HowdoIpersistasessionusingOAuth2.0afterauthorizationthroughathirdpartyservice?[closed]【发布时间】:2016-04-1610:25:20【问题描述】:我正在为我正在开发的应用程序实施基于... 查看详情

爬虫的总结私人日志

...进行相同操作或访问页面的间隔比较固定。第一种情况可使用大量IP 查看详情

使用 iOS SDK 登录后通过 UIWebView 访问网页时保持 Facebook 身份验证

】使用iOSSDK登录后通过UIWebView访问网页时保持Facebook身份验证【英文标题】:keepFacebookauthenticationwhenaccessingwebpagethruUIWebViewafterloginwithiOSSDK【发布时间】:2012-06-0808:01:15【问题描述】:我已成功将facebookiosSDK集成到我的应用程序中... 查看详情

构建请求 URL 以通过同一字段多次过滤 Django 查询集

...samefield【发布时间】:2019-02-0507:04:30【问题描述】:我想使用Q多次过滤同一字段的Django查询集,以包含/排除该字段中具有特定值的记录。我将使用示例模型来说明我的案例。假设我有一个带有字段status的Record模型。该字段可 查看详情