You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

statsmodels与sklearn中log-loss计算结果不一致问题咨询

Statsmodels与Sklearn的对数似然/Log-Loss差异原因

你遇到的问题核心是两个库的计算逻辑定义不同:

  • Statsmodels的res.llf是所有样本的总对数似然,即把每个样本的对数似然直接求和得到的结果。
  • Sklearn的log_loss默认计算的是平均对数损失,也就是先计算每个样本的对数损失(单个样本对数似然的负值),再取所有样本的平均值。

看你的示例数据,一共5个样本:res.llf的绝对值是1.386...,乘以5之后是6.931...,和log_loss给出的6.907...数值非常接近,微小差异来自模型拟合的数值精度误差。

如果要让两者结果完全匹配,只需要在log_loss里设置normalize=False参数,让它返回总对数损失而非平均值,再取负值就和res.llf一致了:

示例代码验证:

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一致
print(-log_loss(df.y, res.fittedvalues, normalize=False))
print(res.llf)

运行后两个结果会几乎完全相同。

内容的提问来源于stack exchange,提问作者dwolfeu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:12:55