【问题标题】:How to handle the feature differences between my training and test data如何处理我的训练和测试数据之间的特征差异
【发布时间】:2018-03-25 23:58:58
【问题描述】:

因此,目前我的训练和测试集从 669 个特征开始,其中许多是分类特征,需要一次性编码。

在对两个集合进行 one-hot 编码后,我发现训练集有额外的特征。

我不太确定如何处理这个问题,但我觉得我有三个选择:

  1. 从训练集中删除这些特征,使两者匹配
  2. 将这些特征添加到测试集中并生成合成数据。
  3. 在训练模型之前,使用一些降维技术 (PCA) 并使用相同数量的组件进行训练和测试。

任何反馈将不胜感激。

【问题讨论】:

    标签: python machine-learning feature-selection


    【解决方案1】:

    我认为您分别对训练和测试数据进行了一次热编码。也许,将它们组合起来,然后应用编码或单独尝试pandas.get_dummies,并使用以下代码symmetric difference 获取差异,然后为缺少的列分配0。

        missing_cols = (set(train.columns)).symmetric_difference(set(test.columns))
        for c in missing_cols:
             titanic_test[c] = 0
    

    【讨论】:

    • 热编码应该在训练集和测试集上分开进行,因为你不知道测试集/实例。
    【解决方案2】:

    分别为训练集和测试集创建假人。排除在测试中但不在训练集中的特征,因为它们没有在训练中使用。包含在训练集中但不在测试集中的特征,并使用训练集的“mean”、“median”、“mode”或零填充对应的数据。

    可以这样做:

    Xdummies=pd.get_dummies(X,drop_first=True)
    features=Xdummies.columns
    xtest=pd.get_dummies(Xhold,drop_first=True)
    test_feat=xtest.columns
    exclude=list(set(test_feat)-set(features))
    include=list(set(features)-set(test_feat))
    Xtest=pd.concat([xtest.drop(exclude,axis=1).reset_index(drop=True),pd.DataFrame(index=range(0,xtest.shape[0]),data=0,columns=include).reset_index(drop=True)],axis=1)
    

    【讨论】:

      猜你喜欢
      • 2016-12-09
      • 2019-06-18
      • 2021-03-30
      • 2019-03-18
      • 2020-02-13
      • 2020-06-26
      • 2017-04-05
      • 2015-01-17
      • 1970-01-01
      相关资源
      最近更新 更多