Weka開發[3]-Evaluation類

      上一次最後的結果就是一個分類的值,可能讓你們大失所望,這一次會給你們一個比較完美的答案,這就是Evaluation類,此次只講一下最簡單的用法,首先初始化一個Evaluation對象,Evaluation類沒有無參的構造函數,通常用Instances對象做爲構造函數的參數。java

       若是沒有分開訓練集和測試集,能夠使用Cross Validation方法,EvaluationcrossValidateModel方法的四個參數分別爲,第一個是分類器,第二個是在某個數據集上評價的數據集,第三個參數是交叉檢驗的次數(10是比較常見的),第四個是一個隨機數對象。dom

       若是有訓練集和測試集,能夠使用Evaluation 類中的evaluateModel方法,方法中的參數爲:第一個爲一個訓練過的分類器,第二個參數是在某個數據集上評價的數據集。例中我爲了簡單用訓練集再次作爲測試集,但願你們不會糊塗。函數

       提醒你們一下,使用crossValidateModel時,分類器不須要先訓練,這其實也應該是常識了。測試

       Evaluation中提供了多種輸出方法,你們若是用過weka軟件,會發現方法輸出結果與軟件中某個顯示結果的是對應的。例中的三個方法toClassDetailsStringtoSummaryStringtoMatrixString比較經常使用。ui

package instanceTest;
 
import java.io.FileReader;
import java.util.Random;
 
import weka.classifiers.Evaluation;
import weka.classifiers.trees.J48;
import weka.core.Instances;
 
public class EvaluationTest{
    private Instances m_instances = null;
    
    public void getFileInstances( String fileName ) throws Exception {
        FileReader frData = new FileReader( fileName );
        m_instances = new Instances( frData );
        
        m_instances.setClassIndex( m_instances.numAttributes() - 1 );
    }
    
    public void crossValidation() throws Exception {
        J48 classifier = new J48();
        //NaiveBayes classifier = new NaiveBayes();
        //SMO classifier = new SMO();
        
        Evaluation eval = new Evaluation( m_instances );
        eval.crossValidateModel( classifier, m_instances, 10, new Random(1));
        System.out.println(eval.toClassDetailsString());
        System.out.println(eval.toSummaryString());
        System.out.println(eval.toMatrixString());
    }
    
    public void evaluateTestData() throws Exception {
        J48 classifier = new J48();
        //NaiveBayes classifier = new NaiveBayes();
        //SMO classifier = new SMO();
        
        classifier.buildClassifier( m_instances );
        
        Evaluation eval = new Evaluation( m_instances );
        eval.evaluateModel( classifier, m_instances );
        System.out.println(eval.toClassDetailsString());
        System.out.println(eval.toSummaryString());
        System.out.println(eval.toMatrixString());
    }
    
    public static void main( String[] args ) throws Exception {
        EvaluationTest etest = new EvaluationTest();
        etest.getFileInstances( "F://Program Files//Weka-3-4//data//contact-lenses.arff");
        etest.crossValidation();
        System.out.println( "***********************************\n\n" );
        etest.evaluateTestData();
    }
}
相關文章
相關標籤/搜索