【问题标题】:How to get predication value for an instance in weka?如何在 weka 中获取实例的预测值?
【发布时间】:2014-01-03 12:44:04
【问题描述】:

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

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

【问题讨论】:

    标签: java weka


    【解决方案1】:

    从 WEKA GUI,分类面板 -> 按“更多选项...” -> 输出预测 -> 选择“纯文本”选项。现在,左键单击“PlainText”并将“outputDistribution”变为“True”。

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

    问候,
    马丁

    【讨论】:

      【解决方案2】:

      我想我找到了解决办法。

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

      【讨论】:

        【解决方案3】:

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

        
        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

        【讨论】:

        • Thanx @walter,非常感谢您的帮助....在韦卡?
        • 我不熟悉weka中的文本挖掘,所以我没有能力回答你的问题。您可以尝试在堆栈溢出中发布一个新问题。
        • 另外,如果这已经回答了您的问题,通常单击“向上和向下”箭头下的复选标记(使其变为绿色)。这让人们知道问题已得到解答,并为我成功回答您的问题提供了一些功劳。我之所以提到它,是因为您似乎是堆栈溢出的新手。
        猜你喜欢
        • 1970-01-01
        • 2016-06-21
        • 2013-04-17
        • 2015-01-16
        • 2012-06-07
        • 2017-04-30
        • 2012-05-25
        • 2013-09-13
        • 2019-07-24
        相关资源
        最近更新 更多