statsmodels 和 sklearn 中 log-loss 的不同值

问题描述 投票:0回答:1

statsmodelssklearn 产生不同的对数损失函数值。玩具示例:

import pandas as pd
import statsmodels.api as sm
from sklearn.metrics import log_loss

df = pd.DataFrame(
    columns=['y','x1','x2'],
    data=[
        [1,3,5],
        [1,-2,7],
        [0,-1,-5],
        [0,2,3],
        [0,3,5],
    ])

logit = sm.Logit(df.y,df.drop(columns=['y']))

res = logit.fit()

res.llf
的结果是-1.386294361119906,而
-log_loss(df.y,res.fittedvalues)
的结果是-6.907755278982137。它们不应该相等吗(由于不同的数值实现,差异很小)? statsmodels 文档
.llf
是模型的对数似然,正如this questionthis Kaggle post 指出的那样,log_loss 只是对数似然的负数。

包装版本:

scikit-learn==1.0.1
statsmodels==0.13.5

scikit-learn statsmodels log-likelihood
1个回答
0
投票

如您所见,

res.fittedvalues
返回一些负值。如果你想预测你的值,你应该使用
res.predict()
代替(0 到 1 之间的值)。
您可以通过以下方式计算对数损失:
1。使用 sklearn log_loss:

log_loss(df.y,res.predict())
--> 0.27725887222398127

2。使用统计模型:

res.mle_retvals['fopt']
--> 0.27725887222398116

由于计算四舍五入,差异很小。

© www.soinside.com 2019 - 2024. All rights reserved.