Weka分类与训练集中的已删除实例

时间:2014-11-16 14:22:50

标签: classification weka outliers

对于数据挖掘竞赛,我正在建立一个流失预测模型。我有一个带标签的训练数据集和没有的测试数据集。为了构建我的模型,我应用了一些过滤器来预处理训练数据集。我使用InterquartileRangeRemoveWithValuesRemoveAttributes过滤器搜索并删除了异常值和极值(因为InterquartileRange为异常值和极值创建了新属性。)

我知道Weka必须提供的测试集和训练集具有相同的过滤器,但我需要测试集中的所有实例才能看到预测的分数。因此,我无法应用RemoveWithValues过滤器。因此,我得到“测试和训练集不兼容”。这个问题可以解决吗?总之,我希望得到我的测试集的所有实例的分数,其中模型建立在没有极值和异常值的训练集上。

1 个答案:

答案 0 :(得分:2)

您似乎误解了培训和测试集的要求。您不需要为测试和训练集应用相同的过滤器,至少在您似乎认为的意义上。但是,您必须应用相同的转换

训练集和测试集必须兼容,即必须具有相同名称和相同类型的相同功能。 (理论上,测试集有可能有更多的功能,但我不知道Weka如何处理这个。)让我们称这个语法兼容。

这通常可以通过应用相同的过滤器来实现,但不一定如此。例如,如果应用将实例移除到训练集的过滤器,则数据集的“格式”不会更改,您也不需要在测试集上应用该格式。

但是,应用相同的过滤器意味着您必须在训练集上训练过滤器,然后将其应用于测试集,否则您最终可能会得到两个语法兼容的数据集(Weka不会抱怨),但不是语义兼容。例如,假设您有一个训练和一个带有数字特征 foo 的测试数据集:

  • 训练集的值为:0,2,5,10
  • 测试集的值为0,2,5
  • 您将Normalize应用于训练集(比例范围[0,1])
  • 过滤后的训练没有值:0.0,0.2,0.5,1.0
  • 将相同的“训练”过滤器应用于测试装置:0.0,0.2,0.5
  • 如果您已将新的Normalize过滤器应用于测试集,那么它将为:0.0,0.4,1.0

所以在你的情况下,你必须做了一些改变测试格式和训练集的方法。 (如果它们不长,你可以在你的问题中发布它们。)


注意:我对此感到困惑

  

我搜索并删除了异常值和极端值

但事实证明,这只是我缺乏知识。 “极端价值观”也是Weka说话的例子,所以没有问题。它们似乎是不是异常值的数据点,但是非常极端,以至于它们对学习模型和泛化过于有影响。 (Source

我会留在这里仅仅是为了提供信息。