我正在Weka上工作,需要为每个测试实例输出每个标签的预测值(概率)。如何在weka中获取实例的预测值?
在GUI中,在分类选项卡中有一个选项(分类 - >选项 - >输出预测值),它通过输出每个标签的预测概率来完成此工作,但是如何在java代码中执行此操作。我想在分类后为每个标签获得概率分数?
我正在Weka上工作,需要为每个测试实例输出每个标签的预测值(概率)。如何在weka中获取实例的预测值?
在GUI中,在分类选项卡中有一个选项(分类 - >选项 - >输出预测值),它通过输出每个标签的预测概率来完成此工作,但是如何在java代码中执行此操作。我想在分类后为每个标签获得概率分数?
以下代码引入一组训练实例,并输出特定实例的预测概率。
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。
我想我找到了解决方案。
训练集和测试集必须相同:头相同,属性名相同,顺序相同。只更改数字。问题是:如果我不知道它,为什么我必须把这个类放到测试集中,而这正是我想要获得的?看来这个方法需要一些东西,但是当你看一下classModel.distributionForInstance(dataModel.instance(0))
时,它会给你用一个double数组的预测。 因此,有必要在测试集中放置一些类的值,然后‘distributionForInstance’
为您提供真正的类结果。
从WEKA GUI,分类面板 - >按“更多选项...” - >输出预测 - >选择“PlainText”选项。现在,左键单击“PlainText”并将“outputDistribution”转换为“True”。
请注意,该过程可以在最近的WEKA版本中执行,例如WEKA 3.8.0。
问候,
马丁
感谢名单@walter,我真的很感谢您的帮助....有没有一种方式来获得测试文档相同维向量,因为我可以通过训练词汇测试得到的训练样本在weka中抽样vua的StringtoVector功能? –
我不熟悉Weka中的文本挖掘,所以我没有很好的装备来回答你的问题。您可以尝试在堆栈溢出中发布新问题。 – Walter
此外,如果这已回答您的问题,则通常在“向上和向下”箭头下单击复选标记(以使其变为绿色)。这让人们知道这个问题已经得到解答,并且为成功回答您的问题提供了一些功劳。我只提到它,因为它看起来像你是堆栈溢出的新手。 – Walter