使用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偏差,这会触发错误)
验证与解决方法
- 确认调用的指标函数:检查代码中是否正确使用
sklearn.metrics.mean_poisson_deviance,而非其他偏差函数。 - 排查全量数据:
# 检查全量y_true是否有<=0的情况(Gamma偏差要求严格正,Poisson允许0) print(np.any(y_test <= 0)) # 检查全量y_pred是否有接近0的极小值 print(np.any(y_pred <= 1e-16)) - 修正函数调用:如果确实误调用了Gamma偏差函数,改为
mean_poisson_deviance即可兼容y_true中的0值。
内容的提问来源于stack exchange,提问作者pypau
相关产品推荐
相关产品推荐

