从 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 中执行此操作,但请查看 statsmodels、GLMResults
(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库构建逻辑回归模型