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

如何在LGBM自定义目标函数中复现泊松(Poisson)损失

你当前的自定义泊松损失存在两处核心错误,修改后即可对齐LGBM内置泊松损失的效果:

错误1:二阶导数(海森矩阵)计算逻辑错误

泊松负对数似然损失的求导逻辑为:

  • 一阶导数:grad = exp(y_pred) - y_true (你的这部分计算是正确的)
  • 二阶导数:hess = exp(y_pred) (你错误地将max_delta_step加入了二阶导数的计算,导致海森值完全偏离正确数值,训练更新逻辑出错)

错误2:max_delta_step的使用场景错误

max_delta_step是LGBM训练层面的全局参数,作用是限制单棵树的输出上限,避免单次迭代的预测值更新幅度过大、exp()计算后出现数值溢出,该参数不需要写在自定义损失函数的导数计算逻辑里。


正确实现方案

1. 自定义损失函数代码

import numpy as np

def custom_poisson_loss(y_true, y_pred):
    # 可选:对预测值做下截断,避免exp计算出现下溢,和内置逻辑对齐
    y_pred = np.clip(y_pred, a_min=-100, a_max=None)
    grad = np.exp(y_pred) - y_true
    hess = np.exp(y_pred)
    return grad, hess

2. 训练参数对齐配置

在LGBM的训练参数中保留max_delta_step=0.7即可,不需要对损失函数做额外修改,其余参数和你使用内置泊松损失时保持完全一致。

你可以先用小样本数据分别测试内置损失和自定义损失的梯度、海森输出,确认二者数值完全一致后再进行全量训练,即可保证最终模型性能对齐。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:09:04