精準率和召回率是兩個不同的評價指標,很多時候它們之間存在著差異,具體在使用的時候如何解讀精準率和召回率,應該視具體使用場景而定
有些場景,人們可能更注重精準率,如****系統,我們定義**公升為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 ...