首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Vowpal Wabbit无法预测二进制值,可能是过度训练?

Vowpal Wabbit无法预测二进制值,可能是过度训练?
EN

Stack Overflow用户
提问于 2016-07-26 01:22:15
回答 2查看 440关注 0票数 0

我正在尝试使用Vowpal Wabbit进行二进制分类,即给定特征值,大众会将其分类为1或0。这是我对训练数据进行格式化的方式。

代码语言:javascript
运行
复制
1 'name | feature1:0 feature2:1 feature3:48 feature4:4881 ...
-1 'name2 | feature1:1 feature2:0 feature3:5 feature4:2565 ...
etc

我有大约30,000个1数据点,以及大约3,000个0数据点。在创建模型之后,我有100个1和100个数据点用于测试。这些测试数据点默认分类为1。以下是我如何格式化预测集:

代码语言:javascript
运行
复制
1 'name | feature1:0 feature2:1 feature3:48 feature4:4881 ...

根据我对大众文档的理解,我需要使用逻辑或铰链loss_function进行二进制分类。这就是我创建模型的方式:

代码语言:javascript
运行
复制
vw -d ../training_set.txt --loss_function logistic/hinge -f model

这就是我尝试预测的方法:

代码语言:javascript
运行
复制
vw -d ../test_set.txt --loss_function logistic/hinge -i model -t -p /dev/stdout

然而,这就是我遇到问题的地方。如果我使用铰链损失函数,所有的预测都是-1。当我使用逻辑损失函数时,我得到了5到11之间的任意值。通常情况下,应该是0的数据点是更低的值,5-7,而应该是1的数据点是6-11。我做错了什么?我看了一遍文档,查看了一大堆关于大众的文章,看看我是否能找出我的问题所在,但我找不到答案。理想情况下,我会得到一个0,1的值,或者一个介于0和1之间的值,它对应于大众认为结果有多强。任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

发布于 2016-07-26 05:44:02

  • 如果输出应该只是-1+1标签,则使用--binary选项(在测试时)。
  • 如果输出应该是介于0和1之间的实数,则使用--loss_function=logistic --link=logistic。训练时需要loss_function=logistic,所以这个数字可以解释为probability.
  • If,输出应该是一个介于-1和1之间的实数,使用--link=glf1.

如果您的训练数据不平衡,例如,正样本比负样本多10倍,但您的测试数据是平衡的(并且您希望在此测试数据上获得最佳损失),则将正样本的importance weight设置为0.1 (因为有10倍的正样本)。

票数 2
EN

Stack Overflow用户

发布于 2016-07-26 03:51:17

独立于你的工具和/或特定的算法,你可以使用“学习曲线”,训练/交叉验证/测试拆分来诊断你的算法并确定你的问题所在。在诊断出问题后,您可以对算法进行调整,例如,如果您发现存在过度拟合,则可以应用以下操作:

添加更多训练数据以降低冗余功能的复杂性。

你可以参考Andrew Ng。YouTube上的“机器学习的建议”视频,了解更多关于这个主题的细节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38573920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档