gpt4 book ai didi

logistic-regression - Vowpal Wabbit逻辑回归的正确性?

转载 作者:行者123 更新时间:2023-12-03 15:15:01 26 4
gpt4 key购买 nike

我已经开始使用 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 在什么意义上以不同的方式执行逻辑回归,如何解释结果?

最佳答案

这是对vovpal wabbit 的常见误解。

人们无法将批量学习与在线学习进行比较。

vwappal wabbit 不是批量学习器。这是一个在线学习者。在线学习者通过一次查看一个示例并在学习过程中稍微调整模型的权重来学习。

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

不过有几个好处:

  • 在线学习者不需要将完整数据加载到内存中(他们通过一次检查一个示例并根据实时观察到的每个示例的损失调整模型来工作),因此他们可以轻松扩展到数十亿个示例。 A 2011 paper by 4 Yahoo! researchers描述了如何使用 vawpal wabbit 在 1 小时内在 1k 节点上从 tera (10^12) 特征数据集中学习。用户经常使用vw从他们的台式机和笔记本电脑上的数十亿个示例数据集中学习。
  • 在线学习是自适应的,可以跟踪条件随时间的变化,因此它可以从非平稳数据中学习,例如与自适应对手学习。
  • 学习自省(introspection):一can observe loss convergence rates while training并识别特定问题,甚至从特定数据集示例或特征中获得重要见解。
  • 在线学习者可以以增量方式学习,因此用户可以混合标记和未标记的示例,以在预测的同时继续学习。
  • 即使在训练期间,估计误差也始终是“样本外”,即 good estimate of the test error .无需将数据拆分为训练和测试子集或执行 N 路交叉验证。下一个(尚未见过的)示例始终用作保留。从操作方面来看,这比批处理方法具有巨大的优势。它极大地简化了典型的机器学习过程。此外,只要您不对数据运行多次,它就可以作为一种很好的过拟合避免机制。

  • 在线学习者对示例顺序非常敏感。对于在线学习者来说,最糟糕的顺序是当类聚集在一起时(所有或几乎所有 -1 先出现,然后是所有 1),就像上面的例子一样。因此,要想从像 vobpal 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 option 将预测映射到逻辑函数 [0, 1] 范围。同样 --link glf1将预测映射到广义逻辑函数 [-1, 1] 范围。

    关于logistic-regression - Vowpal Wabbit逻辑回归的正确性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24822288/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com