我是Weka的新手,我有2级数据要分类。我可以使用加权(单词出现,TFIDF或单词存在)对其进行分类。我想使用Weka中集成的特征选择机制来提高分类器的准确性,如下所示:
BufferedReader trainReader = new BufferedReader(new FileReader(dataSource));
trainInsts = new Instances(trainReader);
trainInsts.setClassIndex(trainInsts.numAttributes() - 1);
// I am using the filter to convert the data from string to numeric
StringToWordVector STWfilter = new StringToWordVector();
FilteredClassifier model = new FilteredClassifier();
model.setFilter(STWfilter);
STWfilter.setOutputWordCounts(true);
int n = 400; // number of features to select
AttributeSelection attributeSelection = new AttributeSelection();
ranker = new Ranker();
ranker.setNumToSelect(n);
infoGainAttributeEval = new InfoGainAttributeEval();
attributeSelection.setEvaluator(infoGainAttributeEval);
attributeSelection.setSearch(ranker);
attributeSelection.setInputFormat(trainInsts);
trainInsts = Filter.useFilter(trainInsts, attributeSelection);
Evaluation eval = new Evaluation(trainInsts);
eval.crossValidateModel(model, trainInsts, folds, new Random(1));
这有效,我可以看到使用标准加权方法(如单词出现)的轻微改进。我不确定我所做的是否正确。因为我觉得特征选择方法与加权方法相同。我还必须提供我应该拥有的“n”号功能吗?这是如何显着影响分类器的结果,如何设置,例如当我有3000个实例时,我应该选择多少功能?在Weka中还有什么方法可以获得我的数据中的特征(单词)数量吗?例如,对于2000个实例,最佳准确度为n = 400。
有何评论?
提前致谢
答案 0 :(得分:2)
逐一解答您的问题:
0.0
。这意味着将保留所有得分超过0.0
的要素,因为它们至少提供了一些预测信息。在信息增益的情况下,您可以将该分数提高到1.0
;阈值越高,您保留的功能就越少。另外,在文献中使用的关于文本分类的经验法则(参见例如Yang & Pedersen paper)保留了约1-10%的特征。在信息检索中,Salton表示文档频率为文档数量的1到10%的术语更具判别性(但信息检索与搜索有关,而不是监督)。所以,总结一下:你做得对 - 继续进行属性选择,但为简单起见,将0.0作为信息增益的最低阈值。