加载已保存的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
相关产品推荐
相关产品推荐

