【问题标题】:Why there is a difference between the accuracy of sklearn.LogisticRegression with penalty='l1' and 'l2' and C=1e80?为什么惩罚='l1'和'l2'和C=1e80的sklearn.LogisticRegression的准确性存在差异?
【发布时间】:2016-05-16 20:33:14
【问题描述】:

我对我得到的结果有些失望。我使用C=1e80penalty = 'l1' 或'l2' 创建了两个模型(sklearn.linear_models.LogisticRegression),然后使用sklearn.cross_validation.cross_val_scorecv=3scoring='roc_auc' 测试它们。对我来说,C=1e80 几乎不会导致正则化,并且 AUC 应该是相同的。相反,带有'l2' 惩罚的模型给出了更差的 AUC,并且多次运行给了我相同的结果。这是怎么发生的?

【问题讨论】:

  • 您的数据是否标准化? C 的规模与特征的规模密切相关
  • 你能发布代码和数据样本吗?
  • 谢谢你,@lejlot。规范化确实解决了这个问题。我认为在交叉验证案例中没有那么重要......

标签: python machine-learning scikit-learn logistic-regression regularized


【解决方案1】:

只是为了让它更清楚一点。大多数损失函数的一般形式是

C SUM_i=1^N loss(h(x_i), y_i|theta) + regularizer(theta)

因此,C 的整个问题是在训练样本的损失总和和正则化器值之间找到平衡点。

现在,如果损失是有界的(就像逻辑回归的情况),那么如果没有适当的归一化,L2 正则化器 (||theta||^2) 可能会增长到无穷大,因此您需要非常高的 C 才能使其无关紧要因此等于 L1 (max_j |theta_j|) 的解。类似地,如果您的损失增长非常快,例如 p>=2 的 Lp 损失,那么正则化器可能非常小,因此您需要非常小的 C 才能让它做任何事情。

【讨论】:

    猜你喜欢
    • 2021-04-04
    • 2016-03-30
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 2011-04-11
    • 2021-10-11
    • 2015-08-06
    相关资源
    最近更新 更多