2016-03-07 107 views
0

我想获得一些信息。在一些测试实例的分类期间。我正在使用带有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

将可能坚持使用这种解决方案,因为它是最合理的一个予到目前为止已经找到了。

再次感谢。

+0

double [] p = cModel.individualPredictions(testInstances.instance(i)) 这里p包含实例属于实际类的概率。 就像当你得到p [0] = 7.664525149317826E-177意味着实际实例属于类0的概率非常低。但是,你可以在p中找到其他类,其中的概率更高。 –

+0

谢谢Istvan,解释。我很难解释这样的数字,因为我更清楚0到1之间的概率。这些输出实际上超出了我的联盟。 :) – c00ki3s

+1

它可能对你有所帮助:http://stackoverflow.com/questions/11960580/weka-classification-liklikely-of-the-classes –

回答

0

所以,我会冒昧地在这里回答我自己的问题,因为我想帮助SO关闭它并继续前进。

classifyInstance()方法将一个实例归类为一个类,但没有提供我正在寻找的必要数据。

我试过double[] p = cModel.individualPredictions(testInstances.instance(i));double[] p = cModel.distributionForInstance(testInstances.instance(i));这两个都返回结果。

我坚持到cModel.distributionForInstance(testInstances.instance(i));方法,因为我需要从我的结果中手动排除一些类。忽略MultiClassClassifier中的不需要的分布是目前唯一可能的解决方案。这暂时解决了我的过滤问题,这些问题与我期望的决定相距太远。

下面是相关岗位:再次WEKA - filtering out classes in a MultiClassClassifier

感谢。

0

当您还需要预测“无类”类别时,您将如何解决挑战?Predicting the "no class"/unrecognised class in Weka Machine Learning

+0

Weka预测您的未知样本的最近类别。预测最近的一个或最相似的一个。这意味着如果你想预测一个“没有课堂”的课程,你将不得不包含有效的数据以用于“无课”课堂预测,我认为这是荒谬的。这可能是计算预测误差或预测置信度的更好方法。如果错误率很高或信心较低,请将实例样本的类值设置为“无类”。你可能想看看这里的讨论:http://forums.pentaho.com/showthread.php?72003-Prediction-confidence-in-Weka – c00ki3s

+0

和另一个关于堆栈的讨论:http://stackoverflow.com/questions/ 11084248/weka-prediction-percentage-confidence-what-does-it-mean和另一个在这里:http://stackoverflow.com/questions/21902473/how-to-calculate-confidence-from-weka-api – c00ki3s