上一次最後的結果就是一個分類的值,可能讓你們大失所望,這一次會給你們一個比較完美的答案,這就是Evaluation類,此次只講一下最簡單的用法,首先初始化一個Evaluation對象,Evaluation類沒有無參的構造函數,通常用Instances對象做爲構造函數的參數。java
若是沒有分開訓練集和測試集,能夠使用Cross Validation方法,Evaluation中crossValidateModel方法的四個參數分別爲,第一個是分類器,第二個是在某個數據集上評價的數據集,第三個參數是交叉檢驗的次數(10是比較常見的),第四個是一個隨機數對象。dom
若是有訓練集和測試集,能夠使用Evaluation 類中的evaluateModel方法,方法中的參數爲:第一個爲一個訓練過的分類器,第二個參數是在某個數據集上評價的數據集。例中我爲了簡單用訓練集再次作爲測試集,但願你們不會糊塗。函數
提醒你們一下,使用crossValidateModel時,分類器不須要先訓練,這其實也應該是常識了。測試
Evaluation中提供了多種輸出方法,你們若是用過weka軟件,會發現方法輸出結果與軟件中某個顯示結果的是對應的。例中的三個方法toClassDetailsString,toSummaryString,toMatrixString比較經常使用。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(); } }