使用m2cgen移植XGBoost模型时出现NaN问题求助
问题分析与解决办法
原因
你遇到的nan是因为m2cgen在读取XGBoost模型的**基准分数(base_score)**时出现了解析错误。XGBoost回归模型的预测逻辑是「基准分数 + 所有决策树的输出」,这里的nan就是本该被替换成base_score的位置出了问题,大概率是m2cgen和你使用的XGBoost 1.7.3存在兼容性适配问题。
解决办法
手动指定base_score规避问题
在初始化XGBRegressor时显式设置base_score=0,让模型基准分数固定为0,m2cgen就能正确解析并生成正常代码:model = xgb.XGBRegressor(objective ='reg:squarederror', max_depth = 2, n_estimators = 1, eval_metric="rmse", base_score=0)重新运行后,生成的C代码里的
nan + var0会变成0.0 + var0,可正常使用。手动修正生成的C代码
先通过Python获取模型真实的base_score:print(model.get_booster().attr('base_score'))将得到的数值替换C代码中的
nan即可。比如输出是0.5,就把返回行改成return 0.5 + var0;。升级m2cgen版本
旧版m2cgen对高版本XGBoost的base_score读取逻辑可能存在bug,尝试升级到最新版本:pip install --upgrade m2cgen
内容的提问来源于stack exchange,提问作者SBF
相关产品推荐
相关产品推荐

