簡體   English   中英

混淆scikit-learn svm的predict_proba的概率

[英]Confusing probabilities of the predict_proba of scikit-learn's svm

我的目的是通過特定類的每個樣本的排序概率繪制PR曲線。 但是,我發現當我使用兩個不同的標准數據集時,svm的predict_proba()獲得的概率有兩種不同的行為:虹膜和數字。

第一種情況是使用下面的python代碼的“iris”情況進行評估,並且它合理地工作,該類獲得最高概率。

D = datasets.load_iris()
clf = SVC(kernel=chi2_kernel, probability=True).fit(D.data, D.target)
output_predict = clf.predict(D.data)
output_proba = clf.predict_proba(D.data)
output_decision_function = clf.decision_function(D.data)
output_my = proba_to_class(output_proba, clf.classes_)

print D.data.shape, D.target.shape
print "target:", D.target[:2]
print "class:", clf.classes_
print "output_predict:", output_predict[:2]
print "output_proba:", output_proba[:2]

接下來,它產生如下輸出。 顯然,每個樣本的最高概率與predict()的輸出匹配:樣本#1為0.97181088,樣本#2為0.96961523。

(150, 4) (150,)
target: [0 0]
class: [0 1 2]
output_predict: [0 0]
output_proba: [[ 0.97181088  0.01558693  0.01260218]
[ 0.96961523  0.01702481  0.01335995]]

但是,當我使用以下代碼將數據集更改為“數字”時,概率揭示了一個反現象,即每個樣本的最低概率支配predict()的輸出標簽,樣本#1的概率為0.00190932,樣本為0.00220549 #2。

D = datasets.load_digits()

輸出:

(1797, 64) (1797,)
target: [0 1]
class: [0 1 2 3 4 5 6 7 8 9]
output_predict: [0 1]
output_proba: [[ 0.00190932  0.11212957  0.1092459   0.11262532      0.11150733  0.11208733
0.11156622  0.11043403  0.10747514  0.11101985]
[ 0.10991574  0.00220549  0.10944998  0.11288081  0.11178518   0.11234661
0.11182221  0.11065663  0.10770783  0.11122952]]

我已經閱讀了這篇文章 ,它引出了使用線性SVM和decision_function()的解決方案。 但是,由於我的任務,我仍然需要關注SVM的卡方內核。

有解決方案嗎

正如文檔所述 ,無法保證predict_probapredict將在SVC上給出一致的結果。 您可以簡單地使用decision_function 對於線性和內核SVM都是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM