標籤:java 資料 cti for io 演算法
import java.io.*;
import weka.classifiers.*;
import weka.classifiers.meta.Vote;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.SelectedTag;
import weka.core.converters.ArffLoader;
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Instances tranIns=null; //訓練資料
Instances testIns=null; //測試資料
Classifier cfs1=null; //分類器1
Classifier cfs2=null; //分類器2
Classifier cfs3=null; //分類器3
Classifier []cfsArray=new Classifier[3]; //分類器數組
try
{
File file=new File("C://Program Files//Weka-3-6//data//segment-challenge.arff"); //訓練資料
ArffLoader loader=new ArffLoader();
loader.setFile(file);
tranIns=loader.getDataSet(); //讀入資料
file=new File("C://Program Files//Weka-3-6//data//segment-test.arff"); //測試資料
loader.setFile(file);
testIns=loader.getDataSet();
testIns.setClassIndex(testIns.numAttributes()-1); //設定類別的位置
tranIns.setClassIndex(tranIns.numAttributes()-1);
cfs1=(Classifier)Class.forName("weka.classifiers.bayes.NaiveBayes").newInstance(); //演算法
cfs2=(Classifier)Class.forName("weka.classifiers.trees.J48").newInstance();
cfs3=(Classifier)Class.forName("weka.classifiers.rules.ZeroR").newInstance();
cfsArray[0]=cfs1;
cfsArray[1]=cfs2;
cfsArray[2]=cfs3;
//分類器的決策方式
Vote ensemble=new Vote();
SelectedTag tag1=new SelectedTag(Vote.MAJORITY_VOTING_RULE,Vote.TAGS_RULES);//(投票)
ensemble.setCombinationRule(tag1);
ensemble.setClassifiers(cfsArray);
ensemble.setSeed(2); //設定隨機種子
ensemble.buildClassifier(tranIns); //訓練分類器
Instance testInst;
Evaluation testingEvaluation1=new Evaluation(testIns); //檢測分類模型的類
Evaluation testingEvaluation2=new Evaluation(testIns);
Evaluation testingEvaluation3=new Evaluation(testIns);
Evaluation testingEvaluation4=new Evaluation(testIns);
int length=testIns.numInstances();
//單獨學習
for(int i=0;i<length;i++)
{
testInst=testIns.instance(i);
testingEvaluation1.evaluateModelOnceAndRecordPrediction(cfs1, testInst);
}
System.out.println("分類正確率:"+(1- testingEvaluation1.errorRate()));
for(int i=0;i<length;i++)
{
testInst=testIns.instance(i);
testingEvaluation2.evaluateModelOnceAndRecordPrediction(cfs2, testInst);
}
System.out.println("分類正確率:"+(1- testingEvaluation2.errorRate()));
for(int i=0;i<length;i++)
{
testInst=testIns.instance(i);
testingEvaluation3.evaluateModelOnceAndRecordPrediction(cfs3, testInst);
}
System.out.println("分類正確率:"+(1- testingEvaluation3.errorRate()));
//整合學習
for(int i=0;i<length;i++)
{
testInst=testIns.instance(i);
testingEvaluation4.evaluateModelOnceAndRecordPrediction(ensemble, testInst);
}
System.out.println("分類正確率:"+(1- testingEvaluation4.errorRate()));
}
catch(Exception e)
{
e.printStackTrace();
}
}
}