我们有一个包含 15k 条分类推文的数据集,我们需要使用这些推文进行情绪分析。我想针对 5k 分类推文的测试集进行测试。由于 Weka 在测试集的标头中需要与训练集标头中存在的相同属性,如果我希望能够针对这个 5k 测试集运行我的分类器,我将不得不使用批量过滤。
但是,我需要通过几个过滤器来运行我的训练集,所以我认为针对训练集运行一个多重过滤器是一个好主意。不运行批处理参数时,多重过滤器工作正常,但是当我尝试批处理过滤时,我从 CLI 收到错误,因为它试图在多重过滤器中执行第一个过滤器:
带有批处理参数的 CLI multiFilter 命令:
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
这是来自 CLI 的结果错误:
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)
以下是训练和测试输入 arffs的部分数据的标题:
训练:
@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
我在这里做错了吗?我知道有监督的重采样要求类属性位于标题中属性列表的底部,并且它是......在测试和训练输入文件中。
编辑:
进一步的测试表明,此错误不会与批量过滤有关,每当我从 CLI 运行监督重采样过滤器时就会发生此错误......我使用的数据适用于我在 CLI 中尝试过的所有其他过滤器,所以我不明白为什么这个过滤器有什么不同......在 GUI 中重新采样数据也可以正常工作......
更新:
这也发生在 SMOTE 过滤器而不是重采样过滤器上