Command line 使用多筛选器的批处理筛选引发“未设置类属性”异常

Command line 使用多筛选器的批处理筛选引发“未设置类属性”异常,command-line,weka,text-classification,Command Line,Weka,Text Classification,我们有一个15k分类推文的数据集,我们需要用它进行情绪分析。我想测试一组5k分类推文。由于Weka需要测试集标题中的属性与训练集标题中的属性相同,如果我想针对这个5k测试集运行分类器,我必须使用批处理过滤 然而,我需要通过几个过滤器来运行我的训练集,所以我认为对训练集运行多重过滤器是个好主意。当不运行batch参数时,multifilter可以正常工作,但当我尝试batch filter时,CLI会出现一个错误,因为它试图在multi filter中执行第一个筛选器: 带批处理参数的CLI多筛选

我们有一个15k分类推文的数据集,我们需要用它进行情绪分析。我想测试一组5k分类推文。由于Weka需要测试集标题中的属性与训练集标题中的属性相同,如果我想针对这个5k测试集运行分类器,我必须使用批处理过滤

然而,我需要通过几个过滤器来运行我的训练集,所以我认为对训练集运行多重过滤器是个好主意。当不运行batch参数时,multifilter可以正常工作,但当我尝试batch filter时,CLI会出现一个错误,因为它试图在multi filter中执行第一个筛选器:

带批处理参数的CLI多筛选器命令:

以下是CLI产生的错误:

以下是包含训练和测试输入ARFF部分数据的标题:

培训:

测试:

我做错什么了吗?我知道监督重采样要求class属性位于标题中属性列表的底部,它是。。。在测试和培训输入文件中

编辑:

进一步的测试表明,此错误与批处理筛选无关,它发生在我从客户端运行监督重采样筛选器时。。。我使用的数据在我在CLI中尝试过的所有其他筛选器上都有效,因此我不明白为什么此筛选器会有任何不同。。。在GUI中重新采样数据也可以正常工作

更新:


这种情况也发生在SMOTE过滤器而不是重采样过滤器上。

无法使批处理过滤器与任何重采样过滤器一起工作。然而,我们的解决方法是简单地重新采样,然后将训练数据随机化为步骤1。从这个简化的集合中,我们对测试集上需要的所有其他内容运行批处理过滤器。这似乎工作得很好。

您可以使用多重过滤器和类赋值器方法使其工作:

java-classpath$jcp weka.filters.MultiFilter -F weka.filters.unsupervised.attribute.ClassAssigner-C last -F weka.filters.supervised.instance.Resample-b1.0-s1-z66.0
java weka.filters.MultiFilter -F "weka.filters.supervised.instance.Resample -B 1.0 -S 1 -Z 15.0 -no-replacement" \
-F "weka.filters.unsupervised.attribute.StringToWordVector -R first-last -W 100000 -prune-rate -1.0 -N 0 -S -stemmer weka.core.stemmers.NullStemmer -M 2 -tokenizer weka.core.tokenizers.AlphabeticTokenizer" \
-F "weka.filters.unsupervised.attribute.Reorder -R 2-last,first"\
-F "weka.filters.supervised.attribute.AttributeSelection -E \"weka.attributeSelection.InfoGainAttributeEval \" -S \"weka.attributeSelection.Ranker -T 0.0 -N -1\"" \
-F weka.filters.AllFilter \
-b -i input\Train.arff -o output\Train_b_out.arff -r input\Test.arff -s output\Test_b_out.arff
weka.core.UnassignedClassException: weka.filters.supervised.instance.Resample: Class attribute not set!
at weka.core.Capabilities.test(Capabilities.java:1091)
at weka.core.Capabilities.test(Capabilities.java:1023)
at weka.core.Capabilities.testWithFail(Capabilities.java:1302)
at weka.filters.Filter.testInputFormat(Filter.java:434)
at weka.filters.Filter.setInputFormat(Filter.java:452)
at weka.filters.SimpleFilter.setInputFormat(SimpleFilter.java:195)
at weka.filters.Filter.batchFilterFile(Filter.java:1243)
at weka.filters.Filter.runFilter(Filter.java:1319)
at weka.filters.MultiFilter.main(MultiFilter.java:425)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at weka.gui.SimpleCLIPanel$ClassRunner.run(SimpleCLIPanel.java:265)
@RELATION classifiedTweets
@ATTRIBUTE @@sentence@@ string
@ATTRIBUTE @@class@@ {1,-1,0}
@DATA
"Conditioning be very important for curly dry hair",0
"Combine with Sunday paper coupon and",0
"Price may vary by store",0
"Oil be not really moisturizers",-1
@RELATION classifiedTweets
@ATTRIBUTE @@sentence@@ string
@ATTRIBUTE @@class@@ {1,-1,0}
@DATA
"5",0
"I give the curl a good form and discipline",1
"I have be cowashing every day",0
"LOL",0
"TITLETITLE Walgreens Weekly and Midweek Deal",0
"And then they walk away",0