WEKA:如何从classifyInstance获得分数?

时间:2011-04-06 08:15:52

标签: weka

我正在使用FilteredClassifier.classifyInstance()在weka中对我的实例进行分类。

我有2个班级(真假)我有很多积极因素,所以我实际上需要知道每个等级的分数才能得到最好的积极。

你知道如何从我的weka分类器中获得分数吗?

感谢

更新:我也尝试使用distributionForInstance,但是对于每个实例,我总是得到一个[1.0,0.0]的数组。

我实际上需要比较几个实例,看哪一个是最可靠的,哪一个有更多的更改才能被正确分类。

4 个答案:

答案 0 :(得分:7)

distributionForInstance(Instance anInstance)是您需要的方法。它会为您提供一个Double数组,显示每个类的置信度。我正在使用Weka 3.6。它适用于我。如果你总是得到相同的值,那么你的分类器训练得不好,根本就没有歧视性。在这种情况下,你应该总是得到预测的同一个类。你的训练集平衡了吗?

答案 1 :(得分:1)

在您的数据上运行分类器之后,您可以通过右键单击“结果列表”中的测试来可视化数据。此右键菜单上有许多其他功能,可让您从weka获得分数分类

答案 2 :(得分:1)

distributionForInstance(Instance anInstance)似乎是正确的。

也许它不适合你,因为分类器不知道你需要置信度值?例如,对于Weka Java上的LibSVM,您需要将setProbabilityEstimates设置为true,以便使用分数。

答案 3 :(得分:0)

假设您的模型已经过培训。

然后,您可以使用distributionForInstance进行预测。此命令生成一个由两个项组成的数组(因为数据集上有两个类:true和false)

double[] distributions = model.distributionForInstance(new_instance);

之后,分布数组中最大项的索引将是分类结果。

假设分布= {0.9638458988630731,0.03615410113692686}。在这种情况下,您的新实例将被归类为class_0,因为第1项大于分布数组中的第2项。

您也可以使用classifyInstance命令获取此索引。

double classifiedIndex = model.classifyInstance(new_instance);

分配的分类值为0 = {0.9638458988630731,0.03615410113692686}。

最后,您可以将类名称设为true或false,而不是类索引。

new_instance.setClassValue(classifiedIndex); //firstly, assigned classified index to new_instance.
String classifiedText = new_instance.stringValue(new_instance.numAttributes());

此代码块产生错误。

您可以检查此GitHub project以进行回归和分类。