如何处理我的训练和测试数据之间的功能差异

时间:2017-10-13 19:32:17

标签: python machine-learning feature-selection

因此,目前我的训练和测试集以669个特征开始,其中许多是绝对的,需要进行单热编码。

对两组进行一次热编码后,我发现训练集具有其他功能。

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

  1. 从训练集中删除这些功能,以便两者匹配
  2. 将这些功能添加到测试集并生成合成数据。
  3. 在我训练模型之前,使用一些降维技术(PCA)并使用相同数量的组件进行训练和测试。
  4. 任何反馈都会非常感激。

2 个答案:

答案 0 :(得分:1)

我认为你在Train& amp;单独测试数据。也许,将它们组合起来,然后应用编码或单独对它们进行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

答案 1 :(得分:0)

分别为训练和测试集创建假人。排除正在测试中但不在训练集中的功能,因为它们未在训练中使用。包括在训练集中但不在测试集中的要素,并使用训练集中的“平均值”,“中位数”,“模式”或零填充与它们相对应的数据。

可以执行以下操作:

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)