![](/img/trans.png)
[英]Specificity at different thresholds (in the same way as sklearn.metrics.precision_recall_curve)
[英]sklearn.metrics.precision_recall_curve: Why are the precision and recall returned arrays instead of single values
我正在計算我最近准備的數據集上的現成算法的精度和召回率。
這是一個二元分類問題,我希望計算我構建的每個分類器的精度,召回率和f分數。
test_x, test_y, predics, pred_prob,score = CH.buildBinClassifier(data,allAttribs,0.3,50,'logistic')
構建分類器方法基本上構建分類器,擬合訓練數據並返回test_x(測試數據的特征),test_y(地面實況標簽),預測(由分類器做出的預測),red_prob(來自LogisiticRegression.predict_proba
預測概率) LogisiticRegression.predict_proba
方法)。
以下是計算精確召回的代碼:
from sklearn.metrics import precision_recall_curve
pr, re, _ = precision_recall_curve(test_y,pred_prob,pos_label=1)
pr
(array([ 0.49852507, 0.49704142, 0.49554896, 0.49702381, 0.49850746,
0.5 , 0.5015015 , 0.50301205, 0.50453172, 0.50606061,
. . . . . . .
0.875 , 1. , 1. , 1. , 1. ,
1. , 1. , 1. , 1. ])
re
array([ 1. , 0.99408284, 0.98816568, 0.98816568, 0.98816568,
0.98816568, 0.98816568, 0.98816568, 0.98816568, 0.98816568,
. . . . . . .
0.04142012, 0.04142012, 0.03550296, 0.0295858 , 0.02366864,
0.01775148, 0.01183432, 0.00591716, 0. ]))
我不明白為什么精確和召回陣列? 它們不應該只是單個數字嗎?
由於精度計算為tpf/(tpf+fpf)
並且同樣可以回想起定義?
我知道通過下面的代碼計算平均精度回憶,但不知何故看到數組而不是tpf,fpf,精度和召回讓我想知道發生了什么。
from sklearn.metrics import precision_recall_fscore_support as prf
precision,recall,fscore,_ = prf(test_y,predics,pos_label=1,average='binary')
編輯:但沒有average
和pos_label
參數,它會報告每個類的精度。 有人可以解釋這兩種方法的輸出之間的差異嗎?
在二進制分類問題中,pred_prob是實例在每個類中的概率,因此實際上預測值(類)取決於該概率,而另一個值則稱為閾值。 pred_prob大於閾值的所有實例都分為一類,而另一類則更小。 默認閾值為0.5。
因此,改變閾值我們有不同的預測結果。 在許多問題中,通過調整閾值可以獲得更好的結果。 這就是為您提供precision_recall_curve的原因。
來自precision_recall_curve的sklearn文檔:
計算不同概率閾值的精確回憶對。
像邏輯回歸這樣的分類器模型實際上不輸出類標簽(如“0”或“1”),它們輸出概率 (如0.67)。 這些概率告訴您輸入樣本屬於特定類的可能性,如正(“1”)類。 但是您仍然需要選擇概率閾值,以便算法可以將概率(0.67)轉換為類(“1”)。
如果選擇閾值0.5,則計算概率大於0.5的所有輸入樣本將分配給正類。 如果您選擇不同的閾值,並且您獲得了分配給正負類的不同數量的樣本,因此不同的精度和召回分數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.