属性错误:"XGBModel"对象没有属性"回调"



Traceback(最近一次调用):文件"D:Miniconda3envsppy39libsite-packagesflaskapp.py",第2073行,在wsgi_app .py&quotResponse = self.full_dispatch_request()文件"D:Miniconda3envsppy39libsite-packagesflaskapp.py",第1518行,在full_dispatch_requestRv = self.handle_user_exception(e)文件"D:Miniconda3envsppy39libsite-packagesflaskapp.py",第1516行,在full_dispatch_requestRv = self.dispatch_request()文件"D:Miniconda3envsppy39libsite-packagesflaskapp.py",第1502行,在dispatch_request返回self.ensure_sync (self.view_functions [rule.endpoint]) (* * req.view_args)文件"C:UsersadminDesktopVScodeWorkProjects2022Product_Classificationretention_ml.py",第169行,在output_result
result_28 = xgboost_reg_281.predict(data[col_reg_28])文件"D:Miniconda3envsppy39libsite-packagesxgboostsklearn.py",第1047行,在预测如果self._can_use_inplace_predict ():文件"D:Miniconda3envsppy39libsite-packagesxgboostsklearn.py",第983行,在_can_use_inplace_predictpredictor = self.get_params().get("predictor", None)文件"D:Miniconda3envsppy39libsite-packagesxgboostsklearn.py",第636行,在get_params类params.update (cp。.get_params (cp、深))文件"D:Miniconda3envsppy39libsite-packagesxgboostsklearn.py",第633行,在get_paramsParams = super().get_params(deep)文件"D:Miniconda3envsppy39libsite-packagessklearnbase.py",第205行,在get_paramsValue = getattr(self, key)AttributeError: 'XGBModel'对象没有属性'callback '

检查xgboost库版本。我将从xgboost==1.5.0 env保存的模型加载到xgboost==1.6.0 env,并在对模型进行操作时得到相同的错误。我把xgboost降级到1.5.0,一切都很好。我怀疑模型保存格式自1.6.0以来发生了变化,因为它给出了关于我使用pickle dump加载二进制模型文件的警告。

我们制作了:

!pip install xgboost==1.5.0

它运行得很好

如果您想使用xgboost 1.6版本,您可以简单地执行以下操作:

new_attrs = ['grow_policy', 'max_bin', 'eval_metric', 'callbacks', 'early_stopping_rounds', 'max_cat_to_onehot', 'max_leaves', 'sampling_method']
for attr in new_attrs:
setattr(xgb_model, attr, None)

设置1.6中有但1.5中没有的所有参数。它们都是可选的,所以据我所知,None是可以的。结果一致。

如果您收到关于模型是旧版本的抱怨(并且您使用了pickle),您可以创建一个使用旧xgboost版本的虚拟环境和一个使用新版本的虚拟环境。然后,在旧版本中,执行:

import pickle
with open("xgb_model_1_5.p", "rb") as rf:
xgb = pickle.load(rf)
bst = xgb.get_booster()
bst.save_model("booster")

然后在1.6虚拟环境中:

import pickle
with open("xgb_model_1_5.p", "rb") as rf:
xgb = pickle.load(rf)
bst = xgb.get_booster()
bst.load_model("booster")
with open("xgb_model_1_6.p", "wb") as wf:
pickle.dump(xgb, wf)

最新更新