在对布尔数据进行分类时,WEKA Train和测试集不兼容

时间:2013-04-05 13:22:39

标签: testing classification weka

当我尝试使用训练数据对新测试数据进行分类时,我在Weka Explorer中收到以下消息:

Problem evaluating classifier:
Train and test set are not compatible
Attributed differ at position 6:
Labels differ at position 1: TRUE != FALSE

我正在使用J48分类器根据布尔形式和数字上的关键字的流行度对RSS提要进行分类。只有布尔变量才会出现此问题。我的训练数据是这样的:

@relation _dm_3793_855329_11032013_1362993476361_Boolean-weka.filters.unsupervised.attribute.NumericToNominal-R65

@attribute bin {FALSE,TRUE}
@attribute kill {FALSE,TRUE}
@attribute laden {FALSE,TRUE}
@attribute video {FALSE,TRUE}
@attribute pakistan {FALSE,TRUE}
@attribute imf {TRUE,FALSE}
…

而等效的测试数据是:

@relation _dm_4993_179211_18032013_1363611143017_Boolean-weka.filters.unsupervised.attribute.NumericToNominal-R65

@attribute bin {FALSE,TRUE}
@attribute kill {FALSE,TRUE}
@attribute laden {FALSE,TRUE}
@attribute video {FALSE,TRUE}
@attribute pakistan {FALSE,TRUE}
@attribute imf {FALSE,TRUE}
…

对于属性为‘imf’的最后一行,标签是相反的,所以我认为这是问题的原因:但我该如何解决呢?

标记了训练和测试数据,典型的行类似于以下内容:

@data
FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE, …, ‘Name of class’

我的.arff文件是用Java代码动态创建的,如下所示:

// Create .arff file.
            CSVLoader loader = new CSVLoader();
            loader.setSource(new File(cf.getCsvFile()));
            Instances data = loader.getDataSet();            
            NumericToNominal numToNom = new NumericToNominal();
            String[] options = Utils.splitOptions("-R " + columnNames.length + ""); // Class attribute, if numeric, must be 'discretized'.          
            numToNom.setOptions(options);
            numToNom.setInputFormat(data);
            data = NumericToNominal.useFilter(data, numToNom);
            ArffSaver saver = new ArffSaver();
            saver.setInstances(data);
            saver.setFile(new File(cf.getArffFile()));
            saver.writeBatch();

所以有人可以告诉我,如果我使用过滤器错误或丢失了什么?通过相同代码生成的数字频率的等效.arff文件是兼容的。

由于

摩根先生。

3 个答案:

答案 0 :(得分:0)

For the last line with attribute ‘imf’, the labels are reversed 
so I assume that this is the cause of the problem: 
but how can I solve it?

更改测试arff文件,使其与训练文件具有相同的标题。除了关系名称之外,训练和测试文件都应具有相同的标题信息。使它最后一行标题是

@attribute imf {TRUE,FALSE}

我有同样的问题,请看question and answer。基本上,您决定标题信息并将其放到另一个文件中。然后您的每个数据集使用相同的标头信息。要么使用编码,要么手工创建arff文件。

答案 1 :(得分:0)

我昨天与Weka的Eibe Frank进行了电子邮件交流。谈话可以在这里看到:

https://list.scms.waikato.ac.nz/pipermail/wekalist/2013-April/057698.html

他提出了一些建议,包括对训练和测试数据集使用相同的Weka NumericToNominal对象,或者如果在不同时间生成训练和测试数据集,则通过序列化保留相同的对象。

然而,在我的情况下,最好的解决方案是分别使用整数1和0代替TRUE和FALSE,并重新生成受影响的数据集。

感谢Atilla Ozgur。

答案 2 :(得分:0)

如果我们用0和1代替TRUE和FALSE。我们不能使用一些基于名义结果的算法。