我正在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