逻辑回归中的正则化参数 C
(参见 http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html )用于允许拟合函数被很好地定义并避免过度拟合或阶跃函数问题(参见 https://datascience.stackexchange.com/questions/10805/does-scikit-learn-use-regularization-by-default/10806 )。

然而,逻辑回归中的正则化应该只关注特征的权重,而不是截距(也在这里解释: http://aimotion.blogspot.com/2011/11/machine-learning-with-python-logistic.html )

但似乎 sklearn.linear_model.LogisticRegression 实际上也正则化了截距。原因如下:

1)仔细考虑上面的链接( https://datascience.stackexchange.com/questions/10805/does-scikit-learn-use-regularization-by-default/10806 ):sigmod 稍微向左移动,更接近截距 0。

2)我尝试用逻辑曲线和手动最大似然函数拟合数据点。将截距包含在 L2 范数中会得到与 sklearn 函数相同的结果。

请教两个问题:

1)我是否弄错了,这是一个错误,还是有合理的理由来规范拦截?

2) 有没有办法使用 sklearn 并指定对除截距以外的所有参数进行正则化?

谢谢!

import numpy as np
from sklearn.linear_model import LogisticRegression

C = 1e1
model = LogisticRegression(C=C)

x = np.arange(100, 110)
x = x[:, np.newaxis]
y = np.array([0]*5 + [1]*5)

print x
print y

model.fit(x, y)
a = model.coef_[0][0]
b = model.intercept_[0]

b_modified = -b/a                   # without regularization, b_modified should be 104.5 (as for C=1e10)

print "a, b:", a, -b/a

# OUTPUT:
# [[100]
#  [101]
#  [102]
#  [103]
#  [104]
#  [105]
#  [106]
#  [107]
#  [108]
#  [109]]
# [0 0 0 0 0 1 1 1 1 1]
# a, b: 0.0116744221756 100.478968664

最佳答案

scikit-learn 具有默认的正则化逻辑回归。

如果仅更改 intercept_scaling 参数,sklearn.linear_model.LogisticRegressionC 参数值的更改对结果有类似的影响。

intercept_scaling 参数修改的情况下,正则化会对逻辑回归中的偏差估计产生影响。当这个参数的值偏高时,正则化对偏差的影响就会减少。每 official documentation :



希望能帮助到你!

关于python - 为什么 sklearn 逻辑回归对权重和截距进行正则化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47067906/

10-12 22:07