如何使用Java Weka开源项目,实现J48决策树、支持向量机算法,在10个UCI数据集上对这两个算法进行性能?

Python014

如何使用Java Weka开源项目,实现J48决策树、支持向量机算法,在10个UCI数据集上对这两个算法进行性能?,第1张

public static void Regular() throws Exception {

        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)