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

如何修改LightGBM非对称损失函数为低估场景施加更高惩罚

LightGBM 低估高罚自定义损失修改方案

首先明确现有代码的残差逻辑:residual = y_true - y_pred,正负值对应场景如下:

  • residual > 0:真实值 > 预测值,属于低估场景
  • residual < 0:真实值 < 预测值,属于高估场景

原代码仅在residual < 0(高估)时触发高惩罚,你只需将惩罚触发条件调整为residual > 0即可,修改后代码如下:

import numpy as np

def custom_asymmetric_train(y_true, y_pred):
    residual = (y_true - y_pred).astype("float")
    # 低估(residual>0)时加罚,惩罚系数可根据业务需要调整,这里示例用10
    grad = np.where(residual > 0, -2 * 10.0 * residual, -2 * residual)
    hess = np.where(residual > 0, 2 * 10.0, 2.0)
    return grad, hess

def custom_asymmetric_valid(y_true, y_pred):
    residual = (y_true - y_pred).astype("float")
    # 验证损失和训练损失逻辑保持一致
    loss = np.where(residual > 0, (residual ** 2) * 10.0, residual ** 2) 
    return "custom_asymmetric_eval", np.mean(loss), False

使用注意事项

  • 代码中的10.0是惩罚系数,数值越大对低估的惩罚力度越强,可根据业务容忍度自行调整为5、20等值
  • LightGBM训练时需指定参数fobj=custom_asymmetric_train,验证时指定feval=custom_asymmetric_valid,同时设置metric="None"避免默认指标干扰

内容的提问来源于stack exchange,提问作者K.D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:06:03