对于数据挖掘竞赛,我正在建立一个流失预测模型。我有一个带标签的训练数据集和没有的测试数据集。为了构建我的模型,我应用了一些过滤器来预处理训练数据集。我使用InterquartileRange
,RemoveWithValues
和RemoveAttributes
过滤器搜索并删除了异常值和极值(因为InterquartileRange
为异常值和极值创建了新属性。)
我知道Weka必须提供的测试集和训练集具有相同的过滤器,但我需要测试集中的所有实例才能看到预测的分数。因此,我无法应用RemoveWithValues
过滤器。因此,我得到“测试和训练集不兼容”。这个问题可以解决吗?总之,我希望得到我的测试集的所有实例的分数,其中模型建立在没有极值和异常值的训练集上。
答案 0 :(得分:2)
您似乎误解了培训和测试集的要求。您不需要为测试和训练集应用相同的过滤器,至少在您似乎认为的意义上。但是,您必须应用相同的转换。
训练集和测试集必须兼容,即必须具有相同名称和相同类型的相同功能。 (理论上,测试集有可能有更多的功能,但我不知道Weka如何处理这个。)让我们称这个语法兼容。
这通常可以通过应用相同的过滤器来实现,但不一定如此。例如,如果应用将实例移除到训练集的过滤器,则数据集的“格式”不会更改,您也不需要在测试集上应用该格式。
但是,应用相同的过滤器意味着您必须在训练集上训练过滤器,然后将其应用于测试集,否则您最终可能会得到两个语法兼容的数据集(Weka不会抱怨),但不是语义兼容。例如,假设您有一个训练和一个带有数字特征 foo 的测试数据集:
Normalize
应用于训练集(比例范围[0,1])Normalize
过滤器应用于测试集,那么它将为:0.0,0.4,1.0 所以在你的情况下,你必须做了一些改变测试格式和训练集的方法。 (如果它们不长,你可以在你的问题中发布它们。)
注意:我对此感到困惑
我搜索并删除了异常值和极端值
但事实证明,这只是我缺乏知识。 “极端价值观”也是Weka说话的例子,所以没有问题。它们似乎是不是异常值的数据点,但是非常极端,以至于它们对学习模型和泛化过于有影响。 (Source)
我会留在这里仅仅是为了提供信息。