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

加载已保存的XGBoost模型后如何应用自定义目标函数?

解决XGBoost加载模型后重新指定自定义目标函数的问题

你报错的原因是把XGBClassifier实例当作函数调用(model(objective=...)),这是错误用法。正确方式是通过修改模型属性或set_params方法重新指定自定义目标函数。

方法一:直接赋值objective属性

加载模型后,将自定义目标函数直接赋值给模型的objective属性:

import os
import numpy as np
from xgboost import XGBClassifier

# 必须定义与训练时完全一致的自定义目标函数
def weighted_binary_cross_entropy(label, pred):
    imbalance_alpha = 90
    sigmoid_pred = 1.0 / (1.0 + np.exp(-pred))
    grad = -(imbalance_alpha ** label) * (label - sigmoid_pred)
    hess = (imbalance_alpha ** label) * sigmoid_pred * (1.0 - sigmoid_pred)
    return grad, hess

# 加载模型
fname = "name.json"
model = XGBClassifier()
model.load_model(fname)

# 重新指定自定义目标函数
model.objective = weighted_binary_cross_entropy

方法二:使用set_params方法

也可以通过set_params方法设置目标函数参数:

model.set_params(objective=weighted_binary_cross_entropy)

注意事项

  • 自定义目标函数的定义必须和训练时完全一致,包括参数名、计算逻辑,否则会导致后续训练或预测异常。
  • 若仅用于预测,自定义目标函数不影响最终结果(XGBoost默认会用sigmoid转换输出,和你自定义函数内的逻辑一致),但显式指定能保证流程一致性;若要基于加载后的模型继续训练,必须重新指定目标函数才能沿用原训练逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:05:27