如何在weka中获取实例的预测值?

时间:2013-12-16 07:35:51

标签: java weka

我正在研究Weka,需要为每个测试实例输出每个标签的预测值(概率)。

在GUI中,分类标签中有一个选项为(classify - > options - >输出预测值),它通过输出每个标签的预测概率但是如何在java代码中执行此操作来完成此工作。我想在分类后获得每个标签的概率分数吗?

3 个答案:

答案 0 :(得分:12)

以下代码接受一组训练实例,并输出特定实例的预测概率。


import weka.classifiers.trees.J48;
import weka.core.Instances;

public class Main {

    public static void main(String[] args) throws Exception
    {
        //load training instances
        Instances test=...

        //build a J48 decision tree
        J48 model=new J48(); 
        model.buildClassifier(test);

        //decide which instance you want to predict
        int s1=2;

        //get the predicted probabilities 
        double[] prediction=model.distributionForInstance(test.get(s1));

        //output predictions
        for(int i=0; i<prediction.length; i=i+1)
        {
            System.out.println("Probability of class "+
                                test.classAttribute().value(i)+
                               " : "+Double.toString(prediction[i]));
        }

    }

}

方法“distributionForInstance”仅适用于能够输出分布预测的分类器。你可以阅读here

答案 1 :(得分:1)

我想我找到了解决方案。

训练集和测试集必须相同:相同的标题,相同的属性名称,相同的顺序。只更改数字。问题是:如果我不知道它,为什么我必须把这个类放在测试集中,而这正是我想要获得的?似乎该方法需要一些东西,但是当你看看classModel.distributionForInstance(dataModel.instance(0))时 ,它为您提供了一个double数组的类预测。 因此,有必要在测试集中放置一些类的值,稍后‘distributionForInstance’会为您的类提供真实的结果。

答案 2 :(得分:-1)

来自WEKA GUI,分类面板 - &gt;按“更多选项...” - &gt;输出预测 - &gt;选择“PlainText”选项。现在,左键单击“PlainText”并将“outputDistribution”变为“True”。

请注意,此过程可以在最后的WEKA版本中执行,例如WEKA 3.8.0。

的问候,
马丁