朴素贝叶斯分类器进行10轮交叉测试

来源:互联网 发布:网站源码可以导出来吗 编辑:程序博客网 时间:2024/05/21 13:55
import java.io.File;
import weka.classifiers.Classifier;
import weka.classifiers.Evaluation;
import weka.classifiers.bayes.NaiveBayes;
import weka.core.converters.ArffLoader;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ArffSaver;
import weka.core.converters.CSVLoader;


public class NaiveBayesTest {


public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String filename="C:\\Users\\PC\\Desktop\\breast-cancer-wisconsin.csv";
String savearff = "C:\\Users\\PC\\Desktop\\breast-cancer-wisconsin.arff";
CSVLoader csv =new CSVLoader();
csv.setSource(new File(filename));
Instances datasrc = csv.getDataSet();
ArffSaver saver = new ArffSaver();
saver.setInstances(datasrc);
saver.setFile(new File(savearff));
saver.writeBatch();
ArffLoader arffloader = new ArffLoader(); //Reads a source that is in arff (attribute relation file format) format.
File inputFile = new File("C:\\Users\\PC\\Desktop\\breast-cancer-wisconsin.arff");//读入训练文件
arffloader.setFile(inputFile);
Instances wisconsin = arffloader.getDataSet(); // 得到格式化的训练数据
wisconsin.setClassIndex(wisconsin.numAttributes()-1);//设置分类属性所在行号(第一行为0号),instancesTrain.numAttributes()可以取得属性总数
Classifier cfs = null; 
cfs = (Classifier) Class.forName(  
"weka.classifiers.bayes.NaiveBayes").newInstance();  
// 使用训练样本进行分类    
cfs.buildClassifier(wisconsin);  


// 使用测试样本测试分类器的学习效果  
Instance testInst;  
Evaluation testingEvaluation = new Evaluation(wisconsin);  
int length = wisconsin.numInstances();  
for(int j=0;j<10;j++){
for (int i = 0; i < length; i++) {  
testInst = wisconsin.instance(i);  
testingEvaluation.evaluateModelOnceAndRecordPrediction(cfs,testInst);            
}  
System.out.println("分类的正确率" + (1 - testingEvaluation.errorRate()));  
}
// 打印分类结果  
}
}
0 0
原创粉丝点击