我想获得一些信息。在一些测试实例的分类期间。我正在使用带有SMO选项的MultiClassClassification模型来预测类。我发现了一些代码here,但这只显示一些基本信息(id,起始类和预计的类)。这真的很酷,但我想要那顶樱桃。WEKA - 从MultiClassClassifier获取预测值
下面是代码:
double classLabel = cModel.classifyInstance(testInstances.instance(i));
System.out.print("ID: " + testInstances.instance(i).value(0));
System.out.print(", actual: " + testInstances.classAttribute().value((int) testInstances.instance(i).classValue()));
System.out.println(", predicted: " + testInstances.classAttribute().value((int) classLabel));
labeled.instance(i).setClassValue(classLabel);
下面是在控制台中显示的一个输出实例(一切正常,分类效果很好):
ID:10.840449559881472,实际: class_1,预测:class_12
我想为输出添加一个概率值,该值显示0到1之间的预测值类(例如0.80 ...)。我怎样才能做到这一点?
我试过这个:double[] p = cModel.individualPredictions(testInstances.instance(i));
但这返回的数字我真的无法理解。输出的
实施例:
7.664525149317826E-177
编辑:
确定。现在我已经使用了distributionForInstance
方法,它实际上返回了一些实际的数字(之前使用过,它给了我那些奇怪的数字),但是对于某些情况的预测非常低,尽管它们被正确分类。可能需要为我的分类器添加更多样本,但至少现在会给出结果。
这段代码示出了结果(以供将来的参考文献):
double[] p = cModel.distributionForInstance(testInstances.instance(i));
一些正确分类未知样品的预测的例子:
0.6801721826680843 - 实施例1类12
0.9834993119977282 - 实例2类14
0.20165539938974703 - 实施例3 1类
0.9947991411834111 - 实施例4类9
0.9809472418105786 - 例如5类3
将可能坚持使用这种解决方案,因为它是最合理的一个予到目前为止已经找到了。
再次感谢。
double [] p = cModel.individualPredictions(testInstances.instance(i)) 这里p包含实例属于实际类的概率。 就像当你得到p [0] = 7.664525149317826E-177意味着实际实例属于类0的概率非常低。但是,你可以在p中找到其他类,其中的概率更高。 –
谢谢Istvan,解释。我很难解释这样的数字,因为我更清楚0到1之间的概率。这些输出实际上超出了我的联盟。 :) – c00ki3s
它可能对你有所帮助:http://stackoverflow.com/questions/11960580/weka-classification-liklikely-of-the-classes –