2014-01-15 192 views
1

我是Weka新手,我有2級數據進行分類。我可以使用權重(單詞出現,TFIDF或單詞出現)對它進行分類。我想提高通過集成在了Weka特徵選擇機制如下分類的準確性:Weka功能選擇(InfoGainAttributeEval,ChiSquaredAttributeEval)

   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。

有何評論?

在此先感謝

回答

2

Aswering您的問題一個接一個:「因爲我覺得特徵選擇方法是一樣的加權方法

  1. 那麼,他們是非常不同的。首先,加權不受監督,它不考慮班級信息;同時監督特徵選擇,並且旨在根據質量度量來選擇最具預測性的特徵(詞),該質量度量度量特徵和類之間的「耦合」。其次,大多數特徵選擇度量(例如信息增益)不考慮權重,只考慮出現的情況 - 它們顯示TFxIDF或二進制特徵的相同結果(分數)。
  2. 也必須給出我應該具有的」n「個特徵數量嗎?」在WEKA中,您可以設置特徵在質量度量中必須獲得的最低分數閾值。一個通用的值將幫助你獨立於實例的數量是0.0。這意味着所有得分超過0.0的特徵將被保留,因爲它們至少提供了一些預測性信息。在信息增益的情況下,您可以將該分數提高到1.0;閾值越高,您將保留的功能越少。此外,在文本分類文獻中使用的經驗法則(例如參見Yang & Pedersen paper)保持約1-10%的特徵。在信息檢索中,薩爾頓表示,那些文檔頻率爲文檔數量1到10%的詞語更具有判別力(但信息檢索是關於搜索,而不是監督的)。

所以,總結:你正在做的是正確的 - 保持與屬性選擇,但爲了簡單起見,州0.0作爲信息增益的最低門檻。

+0

非常感謝專業科學的答案。 – Jeem