这是对 vowpal wabbit 的常见误解。
无法将批量学习与在线学习进行比较。
vowpal wabbit 不是批处理学习器。它是一个在线学习者。在线学习者通过一次查看一个示例并在进行过程中稍微调整模型的权重来学习。
在线学习有利有弊。缺点是收敛到最终模型是缓慢/渐进的。学习者在从每个示例中提取信息方面并没有做“完美”的工作,因为这个过程是迭代的。最终结果的收敛被刻意限制/缓慢。这会使在线学习者在像上面这样的微小数据集上显得很弱。
不过有几个好处:
- 在线学习者不需要将全部数据加载到内存中(他们通过一次检查一个示例并根据实时观察到的每个示例损失来调整模型),因此他们可以轻松扩展到数十亿个示例。2011 年 4 雅虎的论文!研究人员描述了如何使用 vowpal wabbit 在 1k 节点上在 1 小时内从 tera (10^12) 特征数据集中学习。用户经常使用
vw
台式机和笔记本电脑上的数十亿个示例数据集来学习。
- 在线学习是自适应的,可以跟踪条件随时间的变化,因此它可以从非静态数据中学习,例如针对自适应对手进行学习。
- 学习自省:可以在训练时观察损失收敛率并识别特定问题,甚至可以从特定数据集示例或特征中获得重要见解。
- 在线学习者可以以增量方式学习,因此用户可以混合标记和未标记的示例,以便在预测的同时继续学习。
- 即使在训练期间,估计的误差也始终是“样本外”,这是对测试误差的良好估计。无需将数据拆分为训练和测试子集或执行 N 路交叉验证。下一个(尚未见过的)示例始终用作保留。从操作方面来看,这是比批处理方法的巨大优势。它极大地简化了典型的机器学习过程。此外,只要您不对数据运行多次传递,它就可以作为一种很好的过拟合避免机制。
在线学习者对示例顺序非常敏感。对于在线学习者来说,最糟糕的顺序是当类聚集在一起时(所有或几乎所有-1
s 首先出现,然后是所有1
s),就像上面的例子一样。因此,要从像 vowpal wabbit 这样的在线学习者那里获得更好的结果,首先要做的就是统一打乱1
s 和-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] 范围。