【问题标题】:liblinear L1 vs. L2 logistic regression performance differenceliblinear L1 与 L2 逻辑回归性能差异
【发布时间】:2015-08-06 09:58:12
【问题描述】:

我正在使用 LIBLINEAR 训练一个简单的逻辑回归分类器。只有3个特征,标签是二进制0-1。

示例输入文件:

1   1:355.55660999775586    2:-3.401379785      3:5
1   1:252.43759050148728    2:-3.96044759307    3:9
1   1:294.15085871437088    2:-13.1649273486    3:14
1   1:432.10492221032933    2:-2.72636786196    3:9
0   1:753.80863694081768    2:-12.4841741178    3:14
1   1:376.54927850355756    2:-6.9494008935     3:7

现在,如果我使用“-s 6”,也就是“L1-regularized logistic regression”,那么10倍交叉验证准确率在70%左右,每次迭代都在几秒钟内完成. 但是如果我用“-s 7”,也就是“L2-regularized logistic regression(dual)”,那么训练迭代次数超过1000,10倍准确率只有60%。

有没有人见过这种奇怪的行为?据我了解,L1 和 L2 之间的唯一区别是正则化项是使用 abs(x) 还是 pow(x, 2)。

【问题讨论】:

    标签: machine-learning regression liblinear


    【解决方案1】:

    感谢您发布此信息!我经常使用 liblinear,并且通常总是不假思索地使用 L2 损失。这篇文章很好地解释了差异:http://www.chioka.in/differences-between-l1-and-l2-as-loss-function-and-regularization/

    基于此,我猜你不仅有少量的特征,而且可能还有一个小数据集?您是否尝试过增加输入点的数量?

    【讨论】:

    • 感谢您的回复!我有大约 300000 个训练样例,其中 64% 是正训练样例。你觉得这就够了吗?
    • 顺便说一句,非常有帮助的文章!
    • 很高兴这篇文章有帮助!哦,是的,这应该绰绰有余,而且偏差不应该大到足以产生如此大的差异。您是否尝试过标准的东西,比如规范输入数据?你能把误差绘制成训练迭代的函数吗?也许它不收敛?
    【解决方案2】:

    在我看来,这不是一种“奇怪”的行为。在您没有任何感觉之前,您必须进行试验以确认哪个更适合您的情况。理论上,L1-regular 是有界的,就像特征选择一样,而 l2-regular 更平滑。

    【讨论】:

      【解决方案3】:

      我刚刚意识到 LIBLINEAR 提供了两个逻辑回归分类器:

      0 -- L2-regularized logistic regression (primal)
      7 -- L2-regularized logistic regression (dual)
      

      我使用的是 7,即使经过 1000 次迭代也不会收敛。 在我切换到 0 之后,它收敛得非常快,并且能够达到约 70% 的准确度。

      我认为对偶与原始主要是优化方法的差异,所以我认为这可能是一些数值计算问题。

      有关双重形式与原始形式的更多信息: https://stats.stackexchange.com/questions/29059/logistic-regression-how-to-get-dual-function

      【讨论】:

        猜你喜欢
        • 2021-02-07
        • 1970-01-01
        • 2020-06-02
        • 2020-05-09
        • 2018-11-18
        • 2021-04-04
        • 1970-01-01
        • 2020-11-28
        • 2019-01-16
        相关资源
        最近更新 更多