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

使用sklearn计算Mean Poisson Deviance时出现ValueError的原因

问题:计算Mean Poisson Deviance时触发ValueError错误

使用sklearn的Mean Poisson Deviance指标评估随机森林回归结果时,出现如下错误:

ValueError: Mean Tweedie deviance error with power=2 can only be used on strictly positive y and y_pred.

查阅sklearn文档得知,该函数要求:

  • y_true >= 0
  • y_pred > 0

已做检查,结果显示符合要求:

np.any(y_pred<0)
>>> False
np.any(y_pred==0)
>>> False
np.any(y_test<0)
>>> False

附前100条数据概况:
y_pred[0:100]

array([3.5937205 , 3.7193375 , 4.09343503, 4.3736175 , 2.95546795,
       4.04508544, 4.37377352, 3.59788064, 3.626048  , 4.38476427,
       3.66636431, 4.23287305, 4.33319475, 4.3501116 , 3.61961913,
       3.59461904, 3.60071618, 3.96581378, 4.19052013, 4.35723725,
       4.22033789, 4.07398282, 3.4375113 , 2.9226799 , 4.09534177,
       3.59309893, 3.96228398, 3.62929845, 4.16205635, 4.22933483,
       3.14524591, 3.30359978, 4.74198205, 3.32823315, 3.32921776,
       3.60518305, 4.75992   , 3.80171509, 3.30871596, 4.24122775,
       4.16740865, 4.05255728, 4.33714336, 3.58182892, 3.62881694,
       3.26689612, 3.30889384, 4.15076878, 3.63137294, 3.52888806,
       3.52889078, 3.61343248, 4.03201396, 3.63873444, 4.70430122,
       4.13515025, 3.53062101, 3.62593269, 4.36520532, 4.45868711,
       3.16152143, 3.61939638, 3.626048  , 3.61343248, 4.38715328,
       3.139312  , 3.99510801, 3.66807372, 3.08710737, 3.13308799,
       3.31435806, 4.14397136, 3.59442154, 4.86767821, 4.1714686 ,
       4.16953191, 4.16626847, 3.52720347, 4.99668654, 3.26219536,
       3.10700253, 4.60788712, 3.97407225, 4.17907077, 3.5771338 ,
       5.85575543, 4.35914091, 4.11046269, 3.33230884, 3.61872964,
       3.95371359, 3.2868769 , 3.44595121, 4.13779498, 4.50941441,
       3.66820605, 3.28609709, 4.3873206 , 3.60516187, 3.29150883])

y_test[0:100]

array([ 1.,  8.,  5.,  5.,  0.,  4.,  5.,  5.,  1., 12.,  4.,  1.,  4.,
        6.,  6.,  7.,  8.,  3.,  4.,  1.,  7.,  5.,  3.,  3., 10., 10.,
        4.,  6.,  0.,  0.,  1.,  2.,  2.,  4.,  2.,  3.,  5.,  0.,  3.,
        3.,  3.,  9.,  0.,  7.,  0.,  2.,  1.,  8.,  0.,  4.,  2.,  4.,
        4.,  2.,  1.,  0.,  2.,  8.,  7.,  0.,  3.,  3.,  4.,  3.,  3.,
        6.,  3., 11.,  6., 10.,  2.,  2., 10.,  3.,  4.,  5.,  8.,  4.,
        9.,  0.,  2.,  2.,  6.,  4.,  0.,  1.,  5.,  4.,  2.,  1.,  7.,
        4.,  0.,  4.,  4.,  0.,  1.,  4.,  0.,  3.])
错误原因分析

1. 误调用了Gamma偏差计算函数

错误提示针对的是power=2的Tweedie偏差(即Gamma偏差),而Poisson偏差对应的power=1。这说明你代码中很可能误调用了mean_gamma_deviance(),或者调用mean_tweedie_deviance()时传入了power=2,而非正确使用mean_poisson_deviance()。

Gamma偏差的要求比Poisson更严格:它要求y_true和y_pred都必须严格大于0,但你的y_test中存在大量0值,这直接触发了该错误。

2. 全量数据存在未排查的异常值

你仅检查了前100条样本,全量数据中可能存在以下情况:

  • y_pred中存在极小浮点数(如1e-18),这类值虽不等于0,但会被sklearn的判定逻辑视为<=0
  • 全量y_test中存在0值(如果误调用Gamma偏差,这会触发错误)
验证与解决方法
  1. 确认调用的指标函数:检查代码中是否正确使用sklearn.metrics.mean_poisson_deviance,而非其他偏差函数。
  2. 排查全量数据:
    # 检查全量y_true是否有<=0的情况(Gamma偏差要求严格正,Poisson允许0)
    print(np.any(y_test <= 0))
    # 检查全量y_pred是否有接近0的极小值
    print(np.any(y_pred <= 1e-16))
    
  3. 修正函数调用:如果确实误调用了Gamma偏差函数,改为mean_poisson_deviance即可兼容y_true中的0值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 21:14:53