2016-03-07 108 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