我已经开始使用Vowpal Wabbit进行逻辑回归,但是我无法重现其给出的结果。也许它确实有一些未记载的“魔术”,但是有人能复制/验证/检查逻辑回归的计算吗?
例如,利用下面的简单数据,我们旨在对age
预测的方式进行建模label
。显然,随着年龄的增长,存在密切的关系,观察到1的概率也会增加。
作为一个简单的单元测试,我使用了以下12行数据:
age label
20 0
25 0
30 0
35 0
40 0
50 0
60 1
65 0
70 1
75 1
77 1
80 1
现在,使用R,SPSS或什至用手对此数据集执行逻辑回归,将生成一个类似于的模型L = 0.2294*age - 14.08
。因此,如果我降低年龄,并使用logit变换prob = 1 /(1 + EXP(-L)),则可以得到合理预期的从0.0001
第一行到0.9864
最后一行的预测概率。
如果我在Vowpal Wabbit中插入相同的数据,
-1 'P1 |f age:20
-1 'P2 |f age:25
-1 'P3 |f age:30
-1 'P4 |f age:35
-1 'P5 |f age:40
-1 'P6 |f age:50
1 'P7 |f age:60
-1 'P8 |f age:65
1 'P9 |f age:70
1 'P10 |f age:75
1 'P11 |f age:77
1 'P12 |f age:80
然后使用执行逻辑回归
vw -d data.txt -f demo_model.vw --loss_function logistic --invert_hash aaa
(命令行与如何在非常不平衡的数据集上使用vowpal wabbit执行logistic回归相一致),我获得了一个模型L= -0.00094*age - 0.03857
,这是非常不同的。
使用-r
或-p
进一步确认得到的预测值。最终得出的概率几乎完全相同,例如0.4857
对于年龄= 20,0.4716
对于年龄= 80,这是极其不可行的。
我也注意到与较大数据集的不一致。Vowpal Wabbit在什么意义上进行逻辑回归是不同的,如何解释结果?
这是vowpal兔子的常见误解。
人们无法将批处理学习与在线学习进行比较。
vowpal wabbit不是一个批量学习器。它是一个在线学习器。在线学习者通过一次查看一个示例并在进行过程中略微调整模型的权重来进行学习。
在线学习有优点也有缺点。不利的一面是,最终模型的收敛速度缓慢/缓慢。学习者在从每个示例中提取信息时不会做“完美”的工作,因为该过程是迭代的。故意限制/缓慢收敛最终结果。这会使在线学习者在上述微小数据集上显得虚弱。
但是有几个好处:
vw
来学习台式机和笔记本电脑上数十亿个示例数据集。在线学习者对示例顺序非常敏感。对于在线学习者来说,最糟糕的排序是将类聚类在一起(所有或几乎所有-1
s首先出现,然后是所有1
s),就像上面的示例一样。因此,要从像vowpal wabbit这样的在线学习者中获得更好的结果,首先要做的就是统一1
s和-1
s的顺序(或按时间顺序排序,因为示例通常出现在现实生活中)。
好吧,现在呢?
问:在使用在线学习器时,有什么办法可以产生合理的模型,从而对小数据给出合理的预测?
A:是的!
您可以通过两个简单的步骤来模拟批处理学习者的工作更紧密:
1
和-1
示例。注意:如果多次运行直到误差变为0,则存在过度拟合的危险。在线学习者已经很好地学习了您的示例,但是对于看不见的数据可能无法很好地推广。
这里的第二个问题是,所vw
给出的预测不是逻辑函数转换的(这很不幸)。它们类似于与中点的标准偏差(在[-50,50]处截断)。您需要通过utl/logistic
(在源树中)通过管道传递预测以获得有符号的概率。请注意,这些有符号概率在[-1,+1]范围内,而不是[0,1]。您可以使用logistic -0
而不是logistic
将它们映射到[0,1]范围。
因此,鉴于以上所述,这是一个应为您提供更多预期结果的方法:
# Train:
vw train.vw -c --passes 1000 -f model.vw --loss_function logistic --holdout_off
# Predict on train set (just as a sanity check) using the just generated model:
vw -t -i model.vw train.vw -p /dev/stdout | logistic | sort -tP -n -k 2
在您的数据集上给出以下更期望的结果:
-0.95674145247658 P1
-0.930208359811439 P2
-0.888329575506748 P3
-0.823617739247262 P4
-0.726830630992614 P5
-0.405323815830325 P6
0.0618902961794472 P7
0.298575998150221 P8
0.503468453150847 P9
0.663996516371277 P10
0.715480084449868 P11
0.780212725426778 P12
通过增加/减少通过次数,可以使结果更多/更少极化(更接近1
老年人,更接近-1
年轻人)。您可能也对以下培训选项感兴趣:
--max_prediction <arg> sets the max prediction to <arg>
--min_prediction <arg> sets the min prediction to <arg>
-l <arg> set learning rate to <arg>
例如,通过将学习率从默认值提高0.5
到较大值(例如10
),您可以vw
在训练小型数据集时强制更快地收敛,从而需要较少的通行证才能到达那里。
更新资料
自2014年中起,vw
不再需要外部logistic
实用程序将预测映射回[0,1]范围。一个新--link logistic
选项将预测映射到逻辑函数[0,1]范围。类似地,--link glf1
将预测映射到广义逻辑函数[-1,1]范围。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句