Python 为什么sklearn logistic回归将权重和截距都正则化?
logistic回归中的正则化参数C (请参阅)的使用允许对功能进行良好定义,并避免过度安装或阶跃功能出现问题(请参阅) 然而,逻辑回归中的正则化应该只关注特征的权重,而不是截距(这里也解释了:) 但似乎sklearn.linear_model.logistic回归实际上也将截距正则化。原因如下: 1) 仔细考虑上面的链接():sigmod稍微向左移动,靠近截距0 2) 我尝试用逻辑曲线和手动最大似然函数拟合数据点。将截距包含到L2范数中会得到与sklearn函数相同的结果 请回答两个问题: 1) 我是不是搞错了,这是一个bug,还是有合理的理由来规范拦截 2) 有没有一种方法可以使用sklearn和specify来正则化除截取之外的所有参数 谢谢Python 为什么sklearn logistic回归将权重和截距都正则化?,python,scikit-learn,regression,Python,Scikit Learn,Regression,logistic回归中的正则化参数C (请参阅)的使用允许对功能进行良好定义,并避免过度安装或阶跃功能出现问题(请参阅) 然而,逻辑回归中的正则化应该只关注特征的权重,而不是截距(这里也解释了:) 但似乎sklearn.linear_model.logistic回归实际上也将截距正则化。原因如下: 1) 仔细考虑上面的链接():sigmod稍微向左移动,靠近截距0 2) 我尝试用逻辑曲线和手动最大似然函数拟合数据点。将截距包含到L2范数中会得到与sklearn函数相同的结果 请回答两个问题: 1
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学习具有默认的正则化逻辑回归 如果只改变
C
参数,则sklearn.linear\u model.logisticsregression
中intercept\u scaling
参数值的变化对结果有类似的影响
在intercept_scaling
参数修改的情况下,正则化对logistic回归中的偏差估计有影响。当此参数的值位于较高一侧时,正则化对偏差的影响将减小。Per:
截距变为intercept\u scaling*合成功能\u weight
注意!合成特征权重采用l1/l2正则化 与所有其他功能一样。减少正则化对系统的影响 合成特征权重(因此在截距上) 必须增加截距/单位比例
希望有帮助 谢谢@Prem,这确实是解决方案:
C = 1e1
intercept_scaling=1e3 # very high numbers make it unstable in practice
model = LogisticRegression(C=C, intercept_scaling=intercept_scaling)
几年前我问了一个类似的问题。我知道你可以使用参数intercept\u scaling来控制这一点,但我不确定合适的技术。我添加了一个最小的示例。你能用这个例子来说明需要添加什么来不规范截距吗?谢谢我认为,如果你使截距缩放任意大,它的正则化将是可以忽略的(但严格来说不是零),正如@cxrogers正确指出的那样-让我们试试
model=LogisticRegression(intercept\u scaling=99999)
。