我已经开始使用 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
(命令行与How to perform logistic regression using vowpal wabbit on very imbalanced dataset一致),我获得了一个模型L= -0.00094*age - 0.03857
,非常不同。
使用-r
或-p
获得的预测值进一步证实了这一点。结果概率几乎全部相同,例如0.4857
年龄= 20,0.4716
年龄= 80,这是极其偏离。
我也注意到这与大型数据集的不一致。在什么意义上,Vowpal Wabbit以不同方式执行逻辑回归,以及如何解释结果?
答案 0 :(得分:37)
这是对vowpal wabbit的常见误解。
无法将批量学习与在线学习进行比较。
vowpal wabbit不是批量学习者。这是一个在线学习者。在线学习者通过一次查看一个示例来学习,并且稍微调整模型的权重。在线学习有优点和缺点。缺点是最终模型的收敛是缓慢/渐进的。学习者在从每个示例中提取信息时不会做“完美”的工作,因为该过程是迭代的。最终结果的收敛是故意克制/缓慢的。这可能使在线学习者在如上所述的微小数据集上看起来很弱。
但有几个好处:
vw
从台式机和笔记本电脑上学习数十亿个示例数据集。在线学习者对示例顺序非常敏感。在线学习者最糟糕的顺序是将课程聚集在一起(所有或几乎所有-1
首先出现,然后是所有1
s),如上例所示。因此,要像在线学习者(如vowpal wabbit)获得更好的结果,首先要做的是统一调整1
和-1
s(或简单地按时间排序),因为这些示例通常出现在实际中 - 生命)。
现在好吗?
问:在使用在线学习者时,是否可以合理地预测小数据?
答:是的,有!
您可以通过两个简单的步骤来模拟批处理学习者的工作:
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]范围。