Vowpal Wabbit中逻辑回归的正确性?

吊索

我已经开始使用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

现在,使用RSPSS或什至用手对此数据集执行逻辑回归,将生成一个类似于的模型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不是一个批量学习器。它是一个在线学习器。在线学习者通过一次查看一个示例并在进行过程中略微调整模型的权重来进行学习。

在线学习有优点也有缺点。不利的一面是,最终模型的收敛速度缓慢/缓慢。学习者在从每个示例中提取信息时不会做“完美”的工作,因为该过程是迭代的。故意限制/缓慢收敛最终结果。这会使在线学习者在上述微小数据集上显得虚弱。

但是有几个好处:

  • 在线学习者不需要将全部数据加载到内存中(他们可以一次检查一个示例,然后根据实时观察到的每个示例损失来调整模型),因此他们可以轻松扩展到数十亿个示例。4 Yahoo!2011年的论文 研究人员描述了vowpal wabbit如何在1小时内在1k个节点上从Tera(10 ^ 12)特征数据集中学习。用户经常使用它们vw来学习台式机和笔记本电脑上数十亿个示例数据集。
  • 在线学习具有适应性,可以跟踪一段时间内的状况变化,因此它可以从非平稳数据中学习,例如针对适应性对手的学习。
  • 学习内省:在训练时可以观察到损失收敛的速度,并确定特定的问题,甚至可以从特定的数据集示例或功能中获得重要的见识。
  • 在线学习者可以渐进式学习,因此用户可以将带标签的和未带标签的示例混合在一起,以在学习的同时进行预测。
  • 即使在训练期间,估计的误差也总是“样本外”,这是对测试误差良好估计无需将数据拆分为训练和测试子集,也无需执行N向交叉验证。下一个(尚未看到)的示例始终用作保留。从操作方面来说,这是优于批处理方法的巨大优势。它极大地简化了典型的机器学习过程。另外,只要您不对数据进行多次遍历,它就可以作为一种很好的避免过度拟合的机制。

在线学习者对示例顺序非常敏感。对于在线学习者来说,最糟糕的排序是将类聚类在一起(所有或几乎所有-1s首先出现,然后是所有1s),就像上面的示例一样。因此,要从像vowpal wabbit这样的在线学习者中获得更好的结果,首先要做的就是统一1s和-1s的顺序(或按时间顺序排序,因为示例通常出现在现实生活中)。


好吧,现在呢?

问:在使用在线学习器时,有什么办法可以产生合理的模型,从而对小数据给出合理的预测?

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Vowpal Wabbit中的多个标签

来自分类Dev

Vowpal Wabbit互动冗余

来自分类Dev

Vowpal Wabbit的梯度提升

来自分类Dev

Vowpal Wabbit输出的解释

来自分类Dev

解释Vowpal Wabbit的基本输出

来自分类Dev

vowpal wabbit安装make文件

来自分类Dev

在Vowpal Wabbit中获得保持损失

来自分类Dev

在vowpal wabbit中设置权重的实用指南

来自分类Dev

从Vowpal Wabbit的内存中读取数据?

来自分类Dev

Vowpal Wabbit公式中的自适应更新

来自分类Dev

在Vowpal Wabbit中获得保持损失

来自分类Dev

Vowpal Wabbit:低秩矩阵分解?

来自分类Dev

用于多标签分类的Vowpal Wabbit预测

来自分类Dev

Vowpal Wabbit如何表示分类特征

来自分类Dev

Vowpal Wabbit-精确召回f测度

来自分类Dev

使用Vowpal Wabbit时计算AUC

来自分类Dev

Vowpal Wabbit predictions for multi-label classification

来自分类Dev

Vowpal Wabbit多类线性分类

来自分类Dev

多标签分类的Vowpal Wabbit预测

来自分类Dev

使用vowpal wabbit输出模型参数

来自分类Dev

Vowpal Wabbit多类线性分类

来自分类Dev

带有引导的vowpal wabbit中的预测文件格式

来自分类Dev

功能位如何在vowpal wabbit中工作

来自分类Dev

Vowpal Wabbit varinfo和ngrams:不存在的组合

来自分类Dev

原始预测(-r)和预测(-p)之间的Vowpal Wabbit差异

来自分类Dev

Vowpal Wabbit-它如何做哈希

来自分类Dev

Vowpal Wabbit可以处理〜90 GB的数据大小吗?

来自分类Dev

Vowpal Wabbit培训和测试数据格式

来自分类Dev

vowpal wabbit:--multiclass_oaa不产生概率