xgboost-我预测测试数据时功能不匹配

时间:2020-11-12 06:17:44

标签: python xgboost

我正在使用xgboost训练一些数据,然后我想在测试集中对其评分。 我的数据是分类变量和数字变量的组合,因此我使用pd.get_dummies来虚拟所有分类变量。训练很好,但是当我在测试集上对模型评分时就会出现问题。

我收到“ feature_names_mismatch”错误,并且列出了缺少的列。我的数据集已经是矩阵(numpy数组格式)。

功能名称不匹配是有效的,因为测试集中可能没有某些虚拟类别。因此,如果发生这种情况,该模型是否仍然可以工作?

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题;您有一些分类值出现在训练集中,但没有出现在测试集中。当您分别创建虚拟变量(使用一种热编码等转换分类特征)以进行训练和测试时,而不是在整个数据集中执行此操作时,通常会发生这种情况。以下代码可以提供帮助

  for col in featurs_object:
      X[col]=pd.Categorical(X[col],categories=df[col].dropna().unique())
      X_col = pd.get_dummies(X[col])
      X = X.drop(col,axis=1)
      X_col.columns = X_col.columns.tolist()
      frames = [X_col, X] 
      X = pd.concat(frames,axis=1)
  X = pd.concat([X,df_continous],axis=1)
  X_train, X_test, y_train, y_test = train_test_split(X, y,  
                                                    test_size = 0.3,  
                                                    random_state = 1)
  • featurs_object :由要包含在模型构建中的所有类别列组成。
  • df :您的整个数据集(清理后)
  • df_continous :df的子集,仅具有连续功能。