如何获得sklearn中逻辑回归模型的对数似然性?

时间:2018-01-10 10:18:25

标签: math machine-learning scikit-learn logistic-regression log-likelihood

我在sklearn中使用逻辑回归模型,我对检索此类模型的对数似然感兴趣,因此按照建议here执行普通似然比检验。

该模型使用log loss作为评分规则。在文档中,日志丢失被定义为"作为概率分类器预测的真实标签的负对数似然" 。但是,该值始终为正值,而对数似然值应为负值。举个例子:

    
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import log_loss

lr = LogisticRegression()
lr.fit(X_train, y_train)
y_prob = lr.predict_proba(X_test)
log_loss(y_test, y_prob)    # 0.66738

我在模型的文档中没有看到任何方法,我目前还没有其他可能的意识吗?

2 个答案:

答案 0 :(得分:4)

仔细阅读;日志丢失是否定对数可能性。由于对数似然确实与你说的是负数,所以它的负数将是正数。

让我们看一下虚拟数据的例子:

from sklearn.metrics import log_loss
import numpy as np

y_true = np.array([0, 1, 1])
y_pred = np.array([0.1, 0.2, 0.9])

log_loss(y_true, y_pred)
# 0.60671964791658428

现在,让我们手动计算对数似然元素(即每个标签预测对一个值),使用您链接到的scikit-learn文档中给出的公式,不带减号:

log_likelihood_elements = y_true*np.log(y_pred) + (1-y_true)*np.log(1-y_pred)
log_likelihood_elements
# array([-0.10536052, -1.60943791, -0.10536052])

现在,给定对数似然元素(确实是负数),对数损失是它们总和的负数除以样本数:

-np.sum(log_likelihood_elements)/len(y_true)
# 0.60671964791658428

log_loss(y_true, y_pred) == -np.sum(log_likelihood_elements)/len(y_true)
# True

答案 1 :(得分:0)

要获得对数似然,您可以计算:

-log_loss(y_true, y_pred)*len(y_true)