Weka功能选择(InfoGainAttributeEval,ChiSquaredAttributeEval)

时间:2014-01-15 08:35:29

标签: weka

我是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。

有何评论?

提前致谢

1 个答案:

答案 0 :(得分:2)

逐一解答您的问题:

  1. 因为我觉得特征选择方法与加权方法相同。”嗯,它们有很大不同。首先,加权不受监督,不考虑班级信息;而特征选择受到监督,旨在根据衡量特征与类之间“耦合”的质量度量来选择最具预测性的特征(单词)。其次,大多数特征选择度量(例如信息增益)不考虑权重,仅考虑出现 - 它们显示TFxIDF或二进制特征的相同结果(分数)。
  2. 我还必须提供我应该拥有的”n“个功能吗?”在WEKA中,您可以设置功能必须在质量指标中获得的最低分数的阈值。可以独立于实例数量帮助您的通用值是0.0。这意味着将保留所有得分超过0.0的要素,因为它们至少提供了一些预测信息。在信息增益的情况下,您可以将该分数提高到1.0;阈值越高,您保留的功能就越少。另外,在文献中使用的关于文本分类的经验法则(参见例如Yang & Pedersen paper)保留了约1-10%的特征。在信息检索中,Salton表示文档频率为文档数量的1到10%的术语更具判别性(但信息检索与搜索有关,而不是监督)。
  3. 所以,总结一下:你做得对 - 继续进行属性选择,但为简单起见,将0.0作为信息增益的最低阈值。