File inputfile = new File("F:\\weka\\eucalyptus_Train.arff")
ArffLoader loader = new ArffLoader()
loader.setFile(inputfile)
Instances insTrain = loader.getDataSet()
insTrain.setClassIndex(insTrain.numAttributes()-1)
inputfile = new File("F:\\weka\\eucalyptus_Test.arff")
loader.setFile(inputfile)
Instances insTest = loader.getDataSet()
insTest.setClassIndex(insTest.numAttributes()-1)
double sum = insTest.numInstances()
int right = 0
Classifier clas = new J48()
//Classifier clas = new weka.classifiers.bayes.BayesNet()
clas.buildClassifier(insTrain)
for(int i = 0 i < sum i++) {
if(clas.classifyInstance(insTest.instance(i)) == insTest.instance(i).classValue()) {
right++
}
System.out.println(clas.classifyInstance(insTest.instance(i))+" : "+insTest.instance(i).classValue())
}
System.out.println("分类准确率:"+right/sum)
}
svm的话,要用一个wlsvm的包。 代码是一样的,就是Classifier class= new J48()这里要用svm的实例
你熟悉python 就用 python,你熟悉java 就学weka, weka 一个软件连续开发20多年,及其成熟而且做到极致,很多都已经能自动化,其扩展版本甚至算法都能自己选择,极致到完全不懂的人都可以用。
weka有损自以为高深的人的威严和神秘感。很多人特别喜欢反复找轮子,宁愿选择用匕首去杀敌,即使匕首旁边有一支子弹上了膛的AK47,也会选择视而不见。当然如果你要做一些复杂的应用,熟悉java是必须的, 另python 也可以调用weka (好像叫jython)
详细请见:http://stackoverflow.com/questions/8112041/error-while-using-weka-api-in-java-code-class-attribute-not-set你应该在这行 Instances instances = getArffData("E:\\Book2.arff")// 读入文件
后加入一条语句: instances.setClassIndex(instances.numAttributes() - 1)
You should set class index of for your dataset before passing it into classifier. Your classifier must know which is your outcome variable.
//Rest of your code
loader.setQuery("select * from data_training")Instances data = loader.getDataSet()//add this line here
data.setClassIndex(instances.numAttributes() - 1)
//if Hujan is your class attribute(outcome variable)