分類演算法 2 精準率和召回率曲線

2022-08-04 00:24:15 字數 2910 閱讀 6765

精準率和召回率是兩個不同的評價指標,很多時候它們之間存在著差異,具體在使用的時候如何解讀精準率和召回率,應該視具體使用場景而定

有些場景,人們可能更注重精準率,如****系統,我們定義**公升為1,**降為0,我們更關心的是未來公升的**的比例,而在另外一些場景中,人們更加注重召回率,如癌症**系統,定義健康為1,患病為0,我們更關心癌症患者檢查的遺漏情況。

f1 score 兼顧精準率和召回率,它是兩者的調和平均值

\[\frac = \frac(\frac + \frac)

\]\[f1 = \frac

\]定義f1 score

由上看出,f1 score更偏向於分數小的那個指標

精準率和召回率是兩個互相矛盾的目標,提高乙個指標,另乙個指標就會不可避免的下降。如何達到兩者之間的乙個平衡呢?

回憶邏輯回歸演算法的原理:將乙個結果發生的概率大於0.5,就把它分類為1,發生的概率小於0.5,就把它分類為0,決策邊界為:\(\theta ^t \cdot x_b = 0\)

這條直線或曲線決定了分類的結果,平移決策邊界,使\(\theta ^t \cdot x_b\)不等於0而是乙個閾值:\(\theta ^t \cdot x_b = threshold\)

圓形代表分類結果為0,五角星代表分類結果為1,由上圖可以看出,精準率和召回率是兩個互相矛盾的指標,隨著閾值的逐漸增大,召回率逐漸降低,精準率逐漸增大。

程式設計實現不同閥值下的**結果及混淆矩陣

from sklearn.linear_model import logisticregression

# 資料使用前一節處理後的手寫識別資料集

log_reg = logisticregression()

log_reg.fit(x_train,y_train)

求每個測試資料在邏輯回歸演算法中的score值:

不同閥值下**的結果

y_predict_1 = numpy.array(decision_score>=-5,dtype='int')

y_predict_2 = numpy.array(decision_score>=0,dtype='int')

y_predict_3 = numpy.array(decision_score>=5,dtype='int')

檢視不同閾值下的混淆矩陣:

求出0.1步長下,閾值在[min,max]區間下的精準率和召回率,檢視其曲線特徵:

threshold_scores = numpy.arange(numpy.min(decision_score),numpy.max(decision_score),0.1)

precision_scores =

recall_scores =

# 求出每個分類閾值下的**值、精準率和召回率

for score in threshold_scores:

y_predict = numpy.array(decision_score>=score,dtype='int')

畫出精準率和召回率隨閾值變化的曲線

畫出精準率-召回率曲線

# sklearn中最後乙個精準率為1,召回率為0,沒有對應的threshold

精確率 召回率 RoC曲線 PR曲線

ps1 統計中,第一類錯誤 事實為真,被認為是假 第二類錯誤 事實為假,確認為是真 ps2 roc曲線,曲線上每乙個點對應乙個模型,對於同一條曲線上,是指同乙個演算法中所有模型,不同曲線代表圖通演算法。1 tp,tn,fp,fn的概念 圖如下所示,裡面綠色的半圓就是tp true positives...

理解記憶準確率,精準率,召回率。

如何理解這個表?1 positive 0 negative t 正確 f 錯誤 tp 為p 1 正確 那麼實際是1。對應 位置 1,1 fp 為p 1 錯誤 那麼實際是0。對應 位置 1,0 fn 為n 0 錯誤,那麼實際是1。對應 位置 0,1 tn 是n 0 正確,那麼實際是0。對應 位置 0,...

準確率 精確率 召回率 P R曲線

正確肯定 真正例,true positive,tp 為真,實際為真 正確否定 真反例,true negative,tn 為假,實際為假 錯誤肯定 假正例,false positive,fp 為真,實際為假 錯誤否定 假反例,false negative,fn 為假,實際為真。樣例總數為 tp fp ...