我运行了大约1000个类似的逻辑回归,具有相同的协变量,但数据和响应变量略有不同。我的所有响应变量都有稀疏的成功(p(成功)< .05)。
我按如下方式运行LR:我有一个名为“success_fail”的矩阵,它对每个设置(设计矩阵的行)都有成功次数和失败次数。我将LR视为:
skdesign = np.vstack((design,design))
sklabel = np.hstack((np.ones(success_fail.shape[0]),
np.zeros(success_fail.shape[0])))
skweight = np.hstack((success_fail['success'], success_fail['fail']))
logregN = linear_model.LogisticRegression(C=1,
solver= 'lbfgs',fit_intercept=False)
logregN.fit(skdesign, sklabel, sample_weight=skweight)
(sklearn版本0.18)
我注意到,通过正则化回归,结果始终存在偏差,以预测更多"成功"比在训练数据中观察到的。当我放松正规化时,这种偏见消失了。观察到的偏见对我的用例来说是不可接受的,但更正规化的模型似乎确实好一些。
我查看了其中一个回归的参数估计值:每个点下面都是一个参数。看起来截距(左下角的点)对于C = 1模型来说太高了。
为什么会这样?我该如何解决?我可以让sklearn更少地规范拦截吗?
答案 0 :(得分:1)
感谢sklearn邮件列表中的可爱人们,我找到了答案。正如您在问题中所看到的,我创建了一个设计矩阵(包括截距),然后使用“fit_intercept = False”设置拟合模型。这导致了拦截的正规化。对我来说非常愚蠢!我需要做的就是从设计中删除拦截并删除“fit_intercept = False”。