【问题标题】:xgboost - feature mismatch when I predict on my test dataxgboost - 我预测测试数据时的功能不匹配
【发布时间】:2021-02-24 03:49:18
【问题描述】:

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

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

特征名称的不匹配是有效的,因为某些虚拟类别可能不存在于测试集中。那么如果发生这种情况,有没有办法让模型仍然有效?

【问题讨论】:

标签: python xgboost


【解决方案1】:

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

  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 的子集,只有连续特征。

【讨论】:

  • 这个答案应该被标记为解决方案。
猜你喜欢
  • 1970-01-01
  • 2019-12-07
  • 2018-05-04
  • 2021-06-06
  • 2018-01-07
  • 1970-01-01
  • 2017-01-13
  • 2018-05-14
  • 1970-01-01
相关资源
最近更新 更多