我在 Google Colab 中使用 XGBoostClassifier(XGBoost 版本 1.6.0)作为简单的二元分类模型。我将模型保存到文件中以供进一步使用。在同一会话中,从文件加载的模型可以在验证集上很好地重现结果。但是,如果会话结束并且我从头开始连接到 Colab,则同一文件中的同一模型在同一验证集上显示出更糟糕的结果,并且需要再次训练才能重现。 尝试了三种不同的方法来保存和加载模型:
xgb_model.save_model('xgb_native_save.model')
joblib.dump(xgb_model, 'xgb_joblib.model')
with open('xgb_pickle.pkl','wb') as f:
pickle.dump(xgb_model,f)
所有三种方法的结果相同:验证集上的结果甚至不接近模型在保存到文件之前显示的结果。 Random_state 是固定的。 有什么想法可能是问题出在哪里吗?
我发现基于树的二元分类模型(XGBoost、LightGBM,...)也存在同样的问题
当您重新启动内核并加载保存的模型时,booster 内变量的顺序会发生变化。
这就是我解决它的方法(xgboost):
lst_vars_in_model = model.get_booster().feature_names
model.predict_proba(df[lst_vars_in_model])
哇,这个问题应该清楚地记录下来。