【问题标题】:Weka: ReplaceMissingValues for a test fileWeka:测试文件的 ReplaceMissingValues
【发布时间】:2013-01-25 17:52:35
【问题描述】:

当使用 Weka 的 ReplaceMissingValues 为测试 arff 数据集而不是 训练数据集输入缺失值时,我有点担心。下面是命令行:

java -classpath weka.jar weka.filters.unsupervised.attribute.ReplaceMissingValues -c last  -i "test_file_with_missing_values.arff" -o "test_file_with_filled_missing_values.arff"

从之前的帖子(Replace missing values with mean (Weka))了解到,Weka 的ReplaceMissingValues 只是简单地将每个缺失值替换为对应属性的均值。这意味着需要为每个属性计算平均值。虽然这个平均值的计算对于训练文件来说非常好,但对于测试文件来说就不行了。

这是因为在典型的测试场景中,我们不应该假设我们知道输入缺失值的测试属性的平均值。我们只有一个具有多个分类属性的测试记录,而不是将整个测试记录集放在一个测试文件中。因此,相反,我们将根据使用训练数据计算的平均值输入缺失值。那么上面的命令就会变得不正确,因为我们需要有另一个输入(火车属性的方法)。

以前有人想过这个吗?您如何使用 weka 解决这个问题?

【问题讨论】:

    标签: weka


    【解决方案1】:

    简单,见Batch Filtering

    Instances train = ...   // from somewhere
    Instances test = ...    // from somewhere
    Standardize filter = new Standardize();
    filter.setInputFormat(train);  // initializing the filter once with training set
    Instances newTrain = Filter.useFilter(train, filter);  // configures the Filter based on train instances and returns filtered instances
    Instances newTest = Filter.useFilter(test, filter);    // create new test set
    

    过滤器使用训练数据进行初始化,然后应用于训练和测试数据。

    问题是当您在任何处理管道之外应用 ReplaceMissingValue 过滤器时,因为在写入过滤后的数据后,您无法再区分“真实”值和“估算”值。这就是为什么您应该在单个管道中完成所有需要完成的事情,例如,使用 FilteredClassifier:

    java -classpath weka.jar weka.classifiers.meta.FilteredClassifier
    -t "training_file_with_missing_values.arff"
    -T "test_file_with_missing_values.arff"
    -F weka.filters.unsupervised.attribute.ReplaceMissingValues
    -W weka.classifiers.functions.MultilayerPerceptron -- -L 0.3 -M 0.2 -H a
    

    本示例将使用“training_file_with_missing_values.arff”数据集初始化 ReplaceMissingValues 过滤器,然后将过滤器应用于“test_file_with_missing_values.arff”(使用从训练集中学习),然后在过滤后的训练数据上训练多层感知器并预测过滤后的测试数据的类别。

    【讨论】:

    • 谢谢,不过有几个问题。看起来它可以工作,但我是 Weka 的新手,甚至是命令行上的 weka ......我是否也需要运行 StringToWordVector 吗?如何在同一命令中添加第二个过滤器?该代码还会抛出“非法选项-c last”。我也没有使用 MultilayerPerceptron,因为它有这么多功能太慢了,但我知道如何用 LibSVM / NaiveBayes 替换它
    • 然后我如何真正得到它来给我未知数据的预测类别?标签标记为“?”的那些。我怎样才能得到它并保存它?
    • @JoshWeissbock 也许您应该考虑为此发布一个单独的问题。
    • 顺便说一句:我已经修复了上面的命令行,“-c last”不正确
    猜你喜欢
    • 2013-04-05
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2012-03-30
    • 2013-08-09
    • 1970-01-01
    • 2016-02-15
    • 2016-01-25
    相关资源
    最近更新 更多