我正在尝试使用Vowpal Wabbit进行二进制分类,即给定特征值vw会将其分类为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 0个数据点,我正在测试。这些测试数据点默认分为1.以下是格式化预测集的方法:
1 'name | feature1:0 feature2:1 feature3:48 feature4:4881 ...
根据我对大众文档的理解,我需要使用logistic或hinge 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。我究竟做错了什么?我查看了文档并检查了一堆关于VW的文章,看看我能否确定我的问题是什么,但我无法弄清楚。理想情况下,我会得到一个0,1值,或0到1之间的值,这对应于大众认为结果有多强。任何帮助将不胜感激!
答案 0 :(得分:1)
-1
和+1
标签,请使用--binary
选项(测试时)。--loss_function=logistic --link=logistic
。训练时需要loss_function=logistic
,因此数字可以解释为概率。--link=glf1
。如果您的训练数据不平衡,例如正面示例比负数多10倍,但您的测试数据是平衡的(并且您希望在此测试数据上获得最佳损失),将正例的importance weight设置为0.1(因为正数为10倍)实施例)。
答案 1 :(得分:0)
您可以使用"学习曲线"独立于您的工具和/或特定算法。 ,以及训练/交叉验证/测试分裂以诊断您的算法并确定您的问题。诊断出问题后,您可以对算法进行调整,例如,如果发现过度拟合,可以应用以下操作:
你可以参考Andrew Ng。 "对机器学习的建议"有关此主题的详细信息,请访问YouTube上的视频。