2013-03-02 175 views
0

我想在J48中設置-C參數並運行三個存儲在哈希表中的特徵選擇算法。我想比較三者的表現,如精確度,真正積極,真正消極,F1等。但是,當我運行所有功能選擇算法時,它們會返回相同的輸出....我做錯了什麼?使用Weka進行參數優化和屬性選擇

Hashtable<String, ASEvaluation> search=new Hashtable<String, ASEvaluation>(); 

    Instances training_data = new Instances(new BufferedReader(
      new FileReader("test.arff"))); 
    training_data.setClassIndex(training_data.numAttributes() - 1); 
    topAttributes = new int[training_data.numAttributes()]; 

    AttributeSelectedClassifier classifier = new AttributeSelectedClassifier(); 
AttributeSelection attsel = new AttributeSelection(); 

    search.put("Infogain", new InfoGainAttributeEval()); 
    search.put("SymmetricalUncertAttribute",new SymmetricalUncertAttributeEval()); 
    search.put("Chisquared",new ChiSquaredAttributeEval()); 

    for(String key : search.keySet()) { 



     try{ 
      Ranker attribute_search = new Ranker(); 
       J48 base = new J48(); 
      CVParameterSelection ps = new CVParameterSelection(); 
       ps.setClassifier(base); 
       ps.setNumFolds(5); 
       ps.addCVParameter("C 0.1 0.5 5"); 
       ps.buildClassifier(training_data); 

       System.out.println("---------------- " + search.get(key).toString() + " ----------------"); 

       classifier.setClassifier(ps);      
      classifier.setEvaluator(search.get(key)); 
      classifier.setSearch(attribute_search); 

        attsel.setEvaluator(search.get(key)); 
        attsel.setSearch(attribute_search); 
        attsel.setInputFormat(training_data); 



      Evaluation evaluation = new Evaluation(training_data); 
      evaluation.crossValidateModel(ps, training_data, 10, new Random(1)); 
      System.out.println("\nevaluation ->");   
      System.out.println(evaluation.toSummaryString()); 
      System.out.println("MAE: " + evaluation.meanAbsoluteError()); 

     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
+0

您是否檢查過功能選擇算法是否對您的數據集產生影響?他們可能真的會返回所有相同的功能集。即使他們不這樣做,'J48'也可以簡單地選擇在生成的樹中使用的屬性的相同子集。 – 2013-03-02 15:52:18

回答

0

我不知道你是怎麼做到的。但你有沒有嘗試過使用網格搜索?