sklearn 逻辑回归给出有偏见的结果?
sklearn logistic regression gives biased results?
我运行宁约 1000 类似的逻辑回归,具有相同的协变量但略有不同的数据和响应变量。我所有的响应变量都有稀疏的成功(p(成功)<.05 通常)。
I 运行 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)
我注意到,通过正则化回归,结果始终偏向于预测比在训练数据中观察到的更多 "successes"。当我放松正则化时,这种偏差就会消失。观察到的偏差对于我的用例来说是不可接受的,但更正则化的模型看起来确实好一些。
下面,我绘制了 2 个不同 C 值的 1000 个不同回归的结果:
我查看了其中一个回归的参数估计值:每个点下方是一个参数。对于 C=1 模型来说,截距(左下角的点)似乎太高了。
为什么会这样?我该如何解决?我可以让 sklearn 减少截距的正则化吗?
感谢 sklearn 邮件列表中可爱的人们,我找到了答案。正如您在问题中看到的那样,我制作了一个设计矩阵(包括截距),然后用 "fit_intercept = False" 集拟合模型。这导致截距的正则化。对我来说非常愚蠢!我需要做的就是从设计中删除截距并删除 "fit_intercept = False".
我运行宁约 1000 类似的逻辑回归,具有相同的协变量但略有不同的数据和响应变量。我所有的响应变量都有稀疏的成功(p(成功)<.05 通常)。
I 运行 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)
我注意到,通过正则化回归,结果始终偏向于预测比在训练数据中观察到的更多 "successes"。当我放松正则化时,这种偏差就会消失。观察到的偏差对于我的用例来说是不可接受的,但更正则化的模型看起来确实好一些。
下面,我绘制了 2 个不同 C 值的 1000 个不同回归的结果:
我查看了其中一个回归的参数估计值:每个点下方是一个参数。对于 C=1 模型来说,截距(左下角的点)似乎太高了。
为什么会这样?我该如何解决?我可以让 sklearn 减少截距的正则化吗?
感谢 sklearn 邮件列表中可爱的人们,我找到了答案。正如您在问题中看到的那样,我制作了一个设计矩阵(包括截距),然后用 "fit_intercept = False" 集拟合模型。这导致截距的正则化。对我来说非常愚蠢!我需要做的就是从设计中删除截距并删除 "fit_intercept = False".