【问题标题】:Weka classification with removed instances in the training set训练集中删除实例的 Weka 分类
【发布时间】:2015-01-13 11:52:38
【问题描述】:

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

我知道 Weka 需要提供的测试集和训练集具有相同的过滤器,但我需要测试集中的所有实例来查看预测分数。因此,我无法应用 RemoveWithValues 过滤器。因此,我得到“测试和训练集不兼容”。这个问题能解决吗?总而言之,我想使用基于没有极值和异常值的训练集构建的模型获得测试集所有实例的分数。

【问题讨论】:

    标签: classification weka outliers


    【解决方案1】:

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

    训练集和测试集必须兼容,即必须具有同名同类型的相同特征。 (理论上,测试集可能有更多的功能,但我不知道 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-speak的例子,所以没有问题。它们似乎是不是异常值的数据点,但非常极端,以至于它们对学习的模型和泛化影响太大。 (Source)

    我将把它留在这里只是为了提供信息。

    【讨论】:

    • +1 非常好的答案!也许最后的问题应该是 cmets。
    猜你喜欢
    • 2016-04-04
    • 2015-12-12
    • 2013-01-21
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 2017-06-17
    • 2012-03-25
    • 1970-01-01
    相关资源
    最近更新 更多