Python XGBoost:功能名称不匹配

Python XGBoost:功能名称不匹配,python,pandas,xgboost,Python,Pandas,Xgboost,我一直在努力让我的XGBoost模型能够从文章的文本中预测文章的参与时间。首先,我得到一个数据框,表示我从文章中提取的特征,如下所示: article_features = pd.concat([tfidf_df, numeric_df_normalized], axis=1) 然后,我训练我的模型并获得相关的正确列(功能): 然后,我检查了所有必需的功能,并将它们设置为0.0,如果它们不在文章功能中: for col in correct_columns: if col no

我一直在努力让我的XGBoost模型能够从文章的文本中预测文章的参与时间。首先,我得到一个数据框,表示我从文章中提取的特征,如下所示:

article_features = pd.concat([tfidf_df, numeric_df_normalized], axis=1)
然后,我训练我的模型并获得相关的正确列(功能):

然后,我检查了所有必需的功能,并将它们设置为
0.0
,如果它们不在
文章功能中

for col in correct_columns:
        if col not in article_features.columns:
            article_features[col] = 0.0
最后,我删除了本文中提取的训练数据中不存在的特征:

for col in article_features:
    if col not in correct_columns:
        del article_features[col]
因此,现在
文章功能
具有正确数量的功能。我试着跑:

model.predict(article_features)
我得到:

ValueError: feature_names mismatch:...
所以我搜索了一下,并尝试将我的数据帧转换为:

model.predict(article_features.as_matrix())
但我也犯了同样的错误

然后我担心
文章_功能
中的列顺序与
正确列
不一样,所以我做了:

article_features.sort_index(axis=1, inplace=True)
但也犯了同样的错误

知道怎么修理吗


谢谢

其思想是,用于拟合模型的数据包含与用于训练模型的数据完全相同的特征

最后,我删除了从本文中提取的、不需要的特征 存在于培训数据中: .... 因此,现在article_features具有正确数量的功能


您用于拟合模型的数据中存在哪些功能,而用于训练的数据中不存在这些功能呢?

出现此问题的原因是
DMatrix..num_col()
仅返回稀疏矩阵中非零列的数量。因此,如果列车和测试数据具有相同数量的非零列,则一切正常。否则,您将得到不同的要素名称列表。目前有三种解决方案可以解决此问题:

  • 使用重新对齐列车数据帧和测试数据帧的列名称

    test_df = test_df[train_df.columns]
    
  • 先保存模型,然后加载模型

  • 在输入模型之前,将测试数据更改为数组:

    use test_df.values
    
    而不是

    test_df
    

  • 您是如何培训
    型号的
    ?我的意思是,它使用了哪些功能?准确地说,这些特征应该在预测过程中出现,否则就没有任何意义。
    test_df