使用WEKA(Java API)获取预测错误

使用WEKA(Java API)获取预测错误,java,machine-learning,deep-learning,weka,prediction,Java,Machine Learning,Deep Learning,Weka,Prediction,事实上,我已经开发了一个项目,使用随机树进行预测 分类器。您可以输入不同的参数,算法会告诉您 您可以选择回答“是”或“否” 我希望答案是“是”或“否”,以及概率(预测百分比或预测误差)。例如: 是-0.754% 否-0.64% 我怎么能用WEKA做这个?有教程或参考资料可以看吗 这是我的随机树分类器代码: RandomTree cls=new RandomTree(); cls=(RandomTree)weka.core.SerializationHelper.read(“RandomTreeS

事实上,我已经开发了一个项目,使用随机树进行预测 分类器。您可以输入不同的参数,算法会告诉您 您可以选择回答“是”或“否”

我希望答案是“是”或“否”,以及概率(预测百分比或预测误差)。例如:

是-0.754%

否-0.64%

我怎么能用WEKA做这个?有教程或参考资料可以看吗

这是我的随机树分类器代码:

RandomTree cls=new RandomTree();
cls=(RandomTree)weka.core.SerializationHelper.read(“RandomTreeSerializationDoenFermedad.model”);
系统输出打印(“Muestro la profundidad al-cargar el modelo:”+cls);
BufferedReader breader=新的BufferedReader(新文件读取器(patharff));
实例originalTrain=null;
originalTrain=新实例(breader);
originalTrain.setClassIndex(originalTrain.numAttributes()-1);
//原始训练集
System.out.println(“Muestro lo de numAttributes para ver quees:“+originalTrain.attribute(13));
int s1=0;
//执行你的预测
double value=cls.classifyInstance(originalTrain.instance(s1));
//获取预测百分比或分布
System.out.println(“La instancia sobre La que se van a predecir los datos es:”+originalTrain.instance(s1));
double[]percentage=cls.distribution例如(originalTrain.instance(s1));
系统输出打印项次(“百分比:+百分比”);
//获取类值的名称
字符串预测=originalTrain.classAttribute().value((int)value);
//originalTrain.classAttribute().value((int)值)。
System.out.println(“xxx:+originalTrain.classAttribute());
System.out.println(“实例的预测值”+Integer.toString(s1)+):“+prediction);
字符串分布=”;
对于(int i=0;i
这是我用这段代码得到的输出:

如何获得预测误差


提前谢谢你

这是一个使用iris数据集的工作示例。请注意,设置numFolds>0(
cls.setNumFolds(2);
)以获取0和1以外的概率

package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
import java.util.StringJoiner;

import weka.classifiers.trees.RandomTree;
import weka.core.Attribute;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;

public class WekaTest {

    public static void main(String[] args) throws Exception {
        DataSource dataSource = new DataSource("C:\\Program Files\\Weka-3-8\\data\\iris.arff");
        Instances instances = dataSource.getDataSet();

        if (instances.classIndex() == -1) {
            instances.setClassIndex(instances.numAttributes() - 1);
        }

        instances.randomize(new Random(1));

        int trainSize = (int) Math.round(instances.numInstances() * 66 / 100);
        int testSize = instances.numInstances() - trainSize;
        Instances train = new Instances(instances, 0, trainSize);
        Instances test = new Instances(instances, trainSize, testSize);

        RandomTree cls = new RandomTree();
        cls.setNumFolds(2);
        cls.buildClassifier(train);

        Attribute classAttribute = train.classAttribute();
        ArrayList<Object> classNames = Collections.list(classAttribute.enumerateValues());

        for (int i = 0; i < testSize; i++) {
            Instance instance = test.get(i);
            // perform your prediction
            double value = cls.classifyInstance(instance);
            double[] percentage = cls.distributionForInstance(instance);
            int predictedIndex = (int) value;

            StringJoiner sj = new StringJoiner(", ");
            for (int j = 0; j < percentage.length; j++) {
                sj.add(String.format("%s%s %.2f", classNames.get(j), j == predictedIndex ? "*" : "", percentage[j]));
            }

            System.out.println("Distribution for index " + i + ": " + sj.toString());
        }
    }
}
package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
import java.util.StringJoiner;

import weka.classifiers.trees.RandomTree;
import weka.core.Attribute;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;

public class WekaTest {

    public static void main(String[] args) throws Exception {
        DataSource dataSource = new DataSource("C:\\Program Files\\Weka-3-8\\data\\iris.arff");
        Instances instances = dataSource.getDataSet();

        if (instances.classIndex() == -1) {
            instances.setClassIndex(instances.numAttributes() - 1);
        }

        instances.randomize(new Random(1));

        int trainSize = (int) Math.round(instances.numInstances() * 66 / 100);
        int testSize = instances.numInstances() - trainSize;
        Instances train = new Instances(instances, 0, trainSize);
        Instances test = new Instances(instances, trainSize, testSize);

        RandomTree cls = new RandomTree();
        cls.setNumFolds(2);
        cls.buildClassifier(train);

        Attribute classAttribute = train.classAttribute();
        ArrayList<Object> classNames = Collections.list(classAttribute.enumerateValues());

        for (int i = 0; i < testSize; i++) {
            Instance instance = test.get(i);
            // perform your prediction
            double value = cls.classifyInstance(instance);
            double[] percentage = cls.distributionForInstance(instance);
            int predictedIndex = (int) value;

            StringJoiner sj = new StringJoiner(", ");
            for (int j = 0; j < percentage.length; j++) {
                sj.add(String.format("%s%s %.2f", classNames.get(j), j == predictedIndex ? "*" : "", percentage[j]));
            }

            System.out.println("Distribution for index " + i + ": " + sj.toString());
        }
    }
}
Distribution for index 0: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 1: Iris-setosa 0.00, Iris-versicolor 0.13, Iris-virginica* 0.88
Distribution for index 2: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 3: Iris-setosa* 1.00, Iris-versicolor 0.00, Iris-virginica 0.00
Distribution for index 4: Iris-setosa 0.00, Iris-versicolor 0.13, Iris-virginica* 0.88
Distribution for index 5: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 6: Iris-setosa* 1.00, Iris-versicolor 0.00, Iris-virginica 0.00
Distribution for index 7: Iris-setosa* 1.00, Iris-versicolor 0.00, Iris-virginica 0.00
Distribution for index 8: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 9: Iris-setosa 0.00, Iris-versicolor 0.13, Iris-virginica* 0.88
Distribution for index 10: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 11: Iris-setosa 0.00, Iris-versicolor 0.13, Iris-virginica* 0.88
Distribution for index 12: Iris-setosa* 1.00, Iris-versicolor 0.00, Iris-virginica 0.00
Distribution for index 13: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 14: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 15: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 16: Iris-setosa 0.00, Iris-versicolor 0.13, Iris-virginica* 0.88
Distribution for index 17: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 18: Iris-setosa 0.00, Iris-versicolor 0.13, Iris-virginica* 0.88
Distribution for index 19: Iris-setosa 0.00, Iris-versicolor 0.13, Iris-virginica* 0.88
Distribution for index 20: Iris-setosa 0.00, Iris-versicolor 0.00, Iris-virginica* 1.00
Distribution for index 21: Iris-setosa 0.00, Iris-versicolor 0.13, Iris-virginica* 0.88
Distribution for index 22: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 23: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 24: Iris-setosa* 1.00, Iris-versicolor 0.00, Iris-virginica 0.00
Distribution for index 25: Iris-setosa 0.00, Iris-versicolor 0.13, Iris-virginica* 0.88
Distribution for index 26: Iris-setosa* 1.00, Iris-versicolor 0.00, Iris-virginica 0.00
Distribution for index 27: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 28: Iris-setosa* 1.00, Iris-versicolor 0.00, Iris-virginica 0.00
Distribution for index 29: Iris-setosa* 1.00, Iris-versicolor 0.00, Iris-virginica 0.00
Distribution for index 30: Iris-setosa 0.00, Iris-versicolor 0.00, Iris-virginica* 1.00
Distribution for index 31: Iris-setosa 0.00, Iris-versicolor 0.13, Iris-virginica* 0.88
Distribution for index 32: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 33: Iris-setosa* 1.00, Iris-versicolor 0.00, Iris-virginica 0.00
Distribution for index 34: Iris-setosa* 1.00, Iris-versicolor 0.00, Iris-virginica 0.00
Distribution for index 35: Iris-setosa 0.00, Iris-versicolor 0.13, Iris-virginica* 0.88
Distribution for index 36: Iris-setosa* 1.00, Iris-versicolor 0.00, Iris-virginica 0.00
Distribution for index 37: Iris-setosa* 1.00, Iris-versicolor 0.00, Iris-virginica 0.00
Distribution for index 38: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 39: Iris-setosa* 1.00, Iris-versicolor 0.00, Iris-virginica 0.00
Distribution for index 40: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 41: Iris-setosa* 1.00, Iris-versicolor 0.00, Iris-virginica 0.00
Distribution for index 42: Iris-setosa 0.00, Iris-versicolor 0.13, Iris-virginica* 0.88
Distribution for index 43: Iris-setosa 0.00, Iris-versicolor 0.13, Iris-virginica* 0.88
Distribution for index 44: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 45: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 46: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 47: Iris-setosa* 1.00, Iris-versicolor 0.00, Iris-virginica 0.00
Distribution for index 48: Iris-setosa 0.00, Iris-versicolor 0.13, Iris-virginica* 0.88
Distribution for index 49: Iris-setosa 0.00, Iris-versicolor* 1.00, Iris-virginica 0.00
Distribution for index 50: Iris-setosa 0.00, Iris-versicolor 0.13, Iris-virginica* 0.88