逻辑回归中的正则化参数 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.LogisticRegression
中 C
参数值的更改对结果有类似的影响。
在 intercept_scaling
参数修改的情况下,正则化会对逻辑回归中的偏差估计产生影响。当这个参数的值偏高时,正则化对偏差的影响就会减少。每 official documentation :
希望能帮助到你!
关于python - 为什么 sklearn 逻辑回归对权重和截距进行正则化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47067906/