我已经训练了一个XGBoostRegressor模型。当我必须使用这个经过训练的模型对新输入进行预测时,尽管输入特征向量与训练数据具有相同的结构,但predict()函数会抛出feature_names不匹配错误。
此外,为了以与训练数据相同的结构构建特征向量,我正在进行许多低效的处理,例如添加新的空列(如果数据不存在),然后重新排列数据列,使其与训练结构相匹配。有没有一种更好、更清晰的方法来格式化输入,使其与训练结构相匹配?
发布于 2019-06-04 17:02:58
这是在构建模型时列名的顺序与模型评分时列名的顺序不同的情况。
我使用了以下步骤来克服这个错误
首先加载pickle文件
model = pickle.load(open("saved_model_file", "rb"))
按使用顺序导出所有列
cols_when_model_builds = model.get_booster().feature_names
重新排序pandas数据帧
pd_dataframe = pd_dataframe[cols_when_model_builds]
发布于 2018-10-31 17:02:16
在将数据传递给fit/predict之前,请尝试将数据转换为ndarray。例如:如果你的训练数据是train_df,测试数据是test_df。使用以下代码:
train_x = train_df.values
test_x = test_df.values
现在拟合模型:
xgb.fit(train_x,train_y)
最后,预测:
pred = xgb.predict(test_x)
希望这能有所帮助!
发布于 2018-03-21 12:27:05
当我使用pandas DataFrame (非稀疏表示)时,我也遇到了这个问题。
我将训练和测试数据转换为numpy ndarray
。
`X_train = X_train.as_matrix()
X_test = X_test.as_matrix()`
这就是我如何摆脱那个错误的!
https://stackoverflow.com/questions/42338972
复制相似问题