我想獲得一些信息。在一些測試實例的分類期間。我正在使用帶有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
將可能堅持使用這種解決方案,因爲它是最合理的一個予到目前爲止已經找到了。
再次感謝。
double [] p = cModel.individualPredictions(testInstances.instance(i)) 這裏p包含實例屬於實際類的概率。 就像當你得到p [0] = 7.664525149317826E-177意味着實際實例屬於類0的概率非常低。但是,你可以在p中找到其他類,其中的概率更高。 –
謝謝Istvan,解釋。我很難解釋這樣的數字,因爲我更清楚0到1之間的概率。這些輸出實際上超出了我的聯盟。 :) – c00ki3s
它可能對你有所幫助:http://stackoverflow.com/questions/11960580/weka-classification-liklikely-of-the-classes –