XGBRegressor.predict() 在 pickle.load() 之后返回错误



我已经使用 sklearn 接口训练了 XGBRegressor 模型。相关代码如下:

def xgb_regressor_wrapper(X_train, y_train):
xgb_regressor = XGBRegressor(objective='reg:linear', n_estimators=1000, learning_rate=0.01, base_score=0.005)
xgb_regressor.fit(X=X_train, y=y_train) #, eval_set=[(X_test, y_test)], verbose=True)
return xgb_regressor
def save_regressor(station, feature, regressor):
fname = generate_regressor_fname(station, feature)
pickle.dump(regressor, open(fname, "wb" ))
# regressor_list dict contains wrapper functions
# I currently have XGBRegressor and CatBoostRegressor in the list.
regressor_wrapper = regressor_list.get(name) 
# Create and fit XGBRegressor
regressor = regressor_wrapper(X_train, y_train)
# Save regressor
save_regressor(station_id, feature, best_regressor)

一段时间后,我使用以下代码重新加载回归器,并进行预测:

def load_regressor(station, feature):
fname = generate_regressor_fname(station, feature)
return pickle.load(open(fname, "rb" ))
# Load the regressor
regressor = load_regressor(station_id, feature)
# Do the prediction
y_predict = regressor.predict(X_test)

我收到以下错误:

File "regressor_stuff.py", line 169, in regressor_check_for_station_feature
y_predict = regressor.predict(X_test)
File "D:AnacondaenvsDeeplibsite-packagesxgboostsklearn.py", line 268, in predict
return self.booster().predict(test_dmatrix,
TypeError: 'str' object is not callable

经过一些调试,我看到self.booster实际上存储字符串"gbtree"。在为大量特征训练回归器之后(顺便说一下,这需要几天时间(,这并不酷。

关于为什么会发生这种情况的任何建议?

我目前的解决方法是重建XGBBooster,如下所示:

# Load the regressor
if isinstance(regressor, XGBRegressor):
regressor = XGBRegressor()
r = pickle.load(open(fname, "rb" ))
print r.get_xgb_params()
regressor._Booster = r._Booster
regressor.set_params(**r.get_xgb_params())
# Do the prediction
y_predict = regressor.predict(X_test)

谢谢

库尔萨特

我认为您的训练和评分环境中可能存在 xgboost 版本不匹配。我遇到了同样的问题,发现我使用 xgboost==0.6 进行训练,而使用 xgboost==0.6a2 进行评分。

最新更新