XGBClassifier 错误!ValueError:feature_names 不匹配:

数据挖掘 机器学习 Python xgboost
2021-09-20 09:01:51

我有一个数据集如下:目标形状(200000, 1) train_data.shape (200000, 48) test_data.shape(100000, 48)

我已经使用数据来predict_proba使用RandomForestClassifier ExtraTreesClassifier RandomForestClassifier AdaBoostClassifier GradientBoostingClassifierSVC 得到没有错误的结果。

clf = XGBClassifier()显示以下错误(使用相同的代码,除了clf):

ValueError: feature_names mismatch:

3个回答

由于DMatrix..num_col()仅返回稀疏矩阵中非零列的数量而出现此问题。因此,如果训练和测试数据都具有相同数量的非零列,则一切正常。否则,您最终会得到不同的功能名称列表。目前有三种解决方案可以解决此问题:

  1. 使用以下命令重新对齐训练数据框和测试数据框的列名:

    test_df = test_df[train_df.columns]
    
  2. 先保存模型再加载模型

  3. 在输入模型之前将测试数据更改为数组,即:使用,

    test_df.values instead of test_df
    
import numpy as np
train_data = np.array(train_data)
test_data = np.array(test_data)
clf = XGBClassifier()
clf.fit(train,y_train.ravel())
pred = clf.predict_proba(test_data)

使用它而不是您的原始代码。

我用它来解决这个问题。因为数据框中列的顺序不一样。

train_data.sort_index(axis=1, inplace=True) test_data.sort_index(axis=1,inplace=True)