为什么sklearn.LogisticRegression的准确性与惩罚='l1'和'l2'以及C = 1e80之间存在差异?

时间:2016-02-07 00:30:25

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

我对结果感到有些失望。我使用sklearn.linear_models.LogisticRegressionC=1e80'或penalty = 'l1创建了两个模型('l2'),然后使用sklearn.cross_validation.cross_val_scorecv=3和{{{{}}}对其进行测试1}}。对我而言,scoring='roc_auc'应该导致几乎没有正规化,AUC应该是相同的。相反,具有C=1e80惩罚的模型给出了更差的AUC,并且多次运行给出了相同的结果。这是怎么发生的?

1 个答案:

答案 0 :(得分:0)

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

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来使它做任何事情。