機器學習模型三大評估指標 準確率 精度 召回率

2021-09-26 13:08:33 字數 2365 閱讀 2387

二分類任務中用準確率、精度和召回率三大指標評估模型效能,在介紹這些概念之前先介紹混淆矩陣的概念。二分類的混淆矩陣包含四個值:真正例(tp)、假正例(fp)、真反例(tn)、假反例(fn)。如果將乙個資料點**為正例,但它實際是反例,那麼它就是乙個假正例。

混淆矩陣

真實值positive

negative

positive

true positive

false positive

negative

false negative

true negative

示例場景:100個人中有5個****,我們要用乙個模型識別出哪些是****,此時****即為正例,非****是負例。

定義:在**的結果中所有被正確**的正類和正確**的負類的和佔總體樣本數的比重

accuracy = (tp + tn)/(tp + tn + fp + fn)

優點:最符合常人理解的評估指標

缺點:對於非常不平衡的資料集來說,比如以上場景,乙個模型只要將這100個人全部**為非****,那麼準確率就達到了95%,在這樣不平衡的資料集中應聚焦正例(****)的識別,而不是負例(非****)的識別。

定義: 針對原來樣本而言,它表示樣本正類中有多少被**正確了,那也有兩種可能,一種是把原來的正類**成正類,一種是把原來的正類**成負類。在****檢測的例子中,tp是被正確識別 的****,fn 是模型誤分類為非****的****的資料點

recall = tp / (tp + fn)

優點 :表達了模型找到資料集中所有感興趣的資料點的能力

缺點:如果我們將所有人都標記為****,那麼此時模型的召回率是1.0,顯然不行

定義:精確率是針對我們**結果而言的,它表示的是**為正的樣本中有多少時對的,那麼**為正就有兩種可能了,一種就是把正類的**為正的,另一種就是把負類**為正類。在****檢測中,tp是被正確標記的****,fp是被被錯誤標記為****的非****

precision = tp / (tp + fp)

缺點:如果我們的模型只要將乙個****正確識別為****,其他99個人都標記為非****,那麼此時精度為1.0,因為沒有假正例(fp=0),但是此時的召回率卻很低,只有20%

根據2.2和2.3的介紹可以發現,隨著精度的增加,召回率會降低,反之亦然。因此我們要想找到精度和召回率的最佳組合,可以使用f1 score來對兩者進行結合。

f1 = 2 * precision * recall / (precision + recall)

使用調和平均而不是算術平均在於:調和平均可以懲罰極端情況。乙個具有 1.0 的精度,而召回率為 0 的分類器,這兩個指標的算術平均是 0.5,但是 f1 score 會是 0。f1 score 給了精度和召回率相同的權重,它是通用 fβ指標的乙個特殊情況,在 fβ中,β 可以用來給召回率和精度更多或者更少的權重。 如果我們想建立乙個具有最佳的精度—召回率平衡的模型,那麼就要嘗試將 f1 score 最大化。

roc曲線即受試者特徵曲線(receiver operating characteristic curve),它展示了當改變在模型中識別為正例的閾值改變時,召回率和精度的關係會如何變化。roc 曲線在 y 軸上畫出了真正例率(tpr),在 x 軸上畫出了假正例率 (fpr)。其中tpr即為召回率,fpr是負例被**為正例的概率

tpr = tp / (tp + fn)

fpr = fp / (fp + tn)

下圖給乙個roc曲線示例

黑色是隨機分類器,每個給定的模型只能對應一條曲線,通過調整對正例進行分類的閾值來沿著曲線移動,降低閾值時向右上方移動。在閾值為 1.0 的情況下,我們將位於圖的左下方,因為沒有將任何資料點識別為正例,這導致沒有真正例,也沒有假正例(tpr = fpr = 0)。當降低閾值時,我們將更多的資料點識別為正例,導致更多的真正例,但也有更多的假正例 ( tpr 和 fpr 增加)。最終,在閾值 0.0 處,我們將所有資料點識別為正,並發現位於 roc 曲線的右上角 ( tpr = fpr = 1.0 )。

auc是曲線下面積,用來量化模型的roc曲線。這是乙個介於 0 和 1 之間的度量,數值越大,表示分類效能越好。在上圖中,藍色曲線的 auc 將大於紅色曲線的 auc,這意味著藍色模型在實現準確度和召回率的權衡方面更好。隨機分類器 (黑線) 實現 0.5 的 auc。

參考:

提高機器學習模型準確率的八大方法

提公升乙個模型的表現有時很困難。如果你們曾經糾結於相似的問題,那我相信你們中很多人會同意我的看法。你會嘗試所有曾學習過的策略和演算法,但模型正確率並沒有改善。你會覺得無助和困頓,這是 90 的資料科學家開始放棄的時候。不過,這才是考驗真本領的時候 這也是普通的資料科學家跟大師級資料科學家的差距所在。...

提高機器學習模型準確率的八大方法

想要提高模型的效能有時會是一件難度不小的事情。如果你也遇到過類似的情況,相信一定會認同我這一看法。在一一嘗試畢生所學的對策和演算法之後,依然沒能夠提高模型的準確率,這時,一種陷入困境的無助感就會湧上心頭。事實上,百分之九十的資料科學家就是在這一階段選擇了放棄。但是,好戲這才開始!正是這一點劃清了平凡...

機器學習KNN識別準確率 2

import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from math import sqrt from collections import counter class knnclassfi...