4

ReplaceMissingValues使用 Weka仅为测试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))中,我了解到 WekaReplaceMissingValues只是将每个缺失值替换为相应属性的平均值。这意味着需要为每个属性计算平均值。虽然这个平均值的计算对于训练文件来说非常好,但对于测试文件来说就不行了。

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

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

4

1 回答 1

2

简单,请参阅批量过滤

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 ”(使用从训练集中学习的方法),然后在过滤后的训练数据上训练多层感知器并预测过滤后的测试数据的类别。

于 2013-03-10T18:52:26.400 回答