从 scikit-learn 逻辑回归模型计算剩余偏差

Posted

技术标签:

【中文标题】从 scikit-learn 逻辑回归模型计算剩余偏差【英文标题】:Calculate residual deviance from scikit-learn logistic regression model 【发布时间】:2018-12-01 05:07:35 【问题描述】:

有没有办法计算scikit-learn logistic regression model 的剩余偏差?这是 R 模型摘要的标准输出,但我在 sklearn 的任何文档中都找不到它。

【问题讨论】:

【参考方案1】:

您无法在 scikit-learn 中执行此操作,但请查看 statsmodelsGLMResults(API)

【讨论】:

【参考方案2】:

其实可以的。偏差与交叉熵密切相关,交叉熵在sklearn.metrics.log_loss 中。偏差只是 2*(loglikelihood_of_aturated_model - loglikelihood_of_fitted_model)。 Scikit learn 可以(无需更大的调整)仅处理单个实例的分类,因此饱和模型的对数似然将为零。 log_loss 返回的交叉熵是负对数似然。因此,偏差很简单

def deviance(X, y, model):
    return 2*metrics.log_loss(y, model.predict_log_proba(X))

我知道这是一个很晚的答案,但无论如何我希望它会有所帮助。

【讨论】:

应该是model.predict_log_proba,还是只是.predict_proba? log_loss 文档表明第二个参数y_pred 应该是概率... 正确,这里的文档不具体。应该是log_proba 文档说明第二个参数应该是概率,而不是日志(概率)。【参考方案3】:
    按照@russell-richie 的建议,应该是model.predict_proba 不要忘记函数 metrics.log_loss() 中的参数 normalize=False 返回每​​个样本损失的总和。

所以要完成@ingo 的答案,要获得sklearn.linear_model.LogisticRegression 的模型偏差,您可以计算:

def deviance(X, y, model):
    return 2*metrics.log_loss(y, model.predict_proba(X), normalize=False)

【讨论】:

以上是关于从 scikit-learn 逻辑回归模型计算剩余偏差的主要内容,如果未能解决你的问题,请参考以下文章

机器学习系列7 基于Python的Scikit-learn库构建逻辑回归模型

scikit-learn 逻辑回归预测与自我实现不同

Scikit-Learn 逻辑回归内存错误

与用于逻辑回归的 Scikit-Learn 相比,Tensorflow 的性能要差得多

Python 逻辑回归产生错误的系数

scikit-learn学习基础知识三