我正在尝试使用Vowpal Wabbit进行二进制分类,即给定特征值,大众会将其分类为1或0。这是我对训练数据进行格式化的方式。
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。以下是我如何格式化预测集:
1 'name | feature1:0 feature2:1 feature3:48 feature4:4881 ...
根据我对大众文档的理解,我需要使用逻辑或铰链loss_function进行二进制分类。这就是我创建模型的方式:
vw -d ../training_set.txt --loss_function logistic/hinge -f model
这就是我尝试预测的方法:
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之间的值,它对应于大众认为结果有多强。任何帮助都将不胜感激!
发布于 2016-07-26 05:44:02
-1
和+1
标签,则使用--binary
选项(在测试时)。--loss_function=logistic --link=logistic
。训练时需要loss_function=logistic
,所以这个数字可以解释为probability.--link=glf1
.如果您的训练数据不平衡,例如,正样本比负样本多10倍,但您的测试数据是平衡的(并且您希望在此测试数据上获得最佳损失),则将正样本的importance weight设置为0.1 (因为有10倍的正样本)。
发布于 2016-07-26 03:51:17
独立于你的工具和/或特定的算法,你可以使用“学习曲线”,训练/交叉验证/测试拆分来诊断你的算法并确定你的问题所在。在诊断出问题后,您可以对算法进行调整,例如,如果您发现存在过度拟合,则可以应用以下操作:
添加更多训练数据以降低冗余功能的复杂性。
你可以参考Andrew Ng。YouTube上的“机器学习的建议”视频,了解更多关于这个主题的细节。
https://stackoverflow.com/questions/38573920
复制相似问题