評價指標是針對將相同的數據,輸入不一樣的算法模型,或者輸入不一樣參數的同一種算法模型,而給出這個算法或者參數好壞的定量指標。html
在模型評估過程當中,每每須要使用多種不一樣的指標進行評估,在諸多的評價指標中,大部分指標只能片面的反應模型的一部分性能,若是不能合理的運用評估指標,不只不能發現模型自己的問題,並且會得出錯誤的結論。算法
最近剛好在作文本分類的工做,因此把機器學習分類任務的評價指標又過了一遍。本文將詳細介紹機器學習分類任務的經常使用評價指標:準確率(Accuracy)、精確率(Precision)、召回率(Recall)、P-R曲線(Precision-Recall Curve)、F1 Score、混淆矩陣(Confuse Matrix)、ROC、AUC。機器學習
準確率是分類問題中最爲原始的評價指標,準確率的定義是預測正確的結果佔總樣本的百分比,其公式以下: $$ Accuracy = \frac{TP+TN}{TP+TN+FP+FN} $$ 其中:性能
可是,準確率評價算法有一個明顯的弊端問題,就是在數據的類別不均衡,特別是有極偏的數據存在的狀況下,準確率這個評價指標是不能客觀評價算法的優劣的。例以下面這個例子:學習
在測試集裏,有100個sample,99個反例,只有1個正例。若是個人模型不分青紅皁白對任意一個sample都預測是反例,那麼個人模型的準確率就爲0.99,從數值上看是很是不錯的,但事實上,這樣的算法沒有任何的預測能力,因而咱們就應該考慮是否是評價指標出了問題,這時就須要使用其餘的評價指標綜合評判了。測試
精準率(Precision)又叫查準率,它是針對預測結果而言的,它的含義是在全部被預測爲正的樣本中實際爲正的樣本的機率,意思就是在預測爲正樣本的結果中,咱們有多少把握能夠預測正確,其公式以下: $$ Precision = \frac{TP}{TP+FP} $$ 精準率和準確率看上去有些相似,可是徹底不一樣的兩個概念。精準率表明對正樣本結果中的預測準確程度,而準確率則表明總體的預測準確程度,既包括正樣本,也包括負樣本。spa
召回率(Recall)又叫查全率,它是針對原樣本而言的,它的含義是在實際爲正的樣本中被預測爲正樣本的機率,其公式以下: $$ Recall = \frac{TP}{TP+FN} $$ 引用Wiki中的圖,幫助說明下兩者的關係。orm
在不一樣的應用場景下,咱們的關注點不一樣,例如,在預測股票的時候,咱們更關心精準率,即咱們預測升的那些股票裏,真的升了有多少,由於那些咱們預測升的股票都是咱們投錢的。而在預測病患的場景下,咱們更關注召回率,即真的患病的那些人裏咱們預測錯了狀況應該越少越好。htm
精確率和召回率是一對此消彼長的度量。例如在推薦系統中,咱們想讓推送的內容儘量用戶全都感興趣,那隻能推送咱們把握高的內容,這樣就漏掉了一些用戶感興趣的內容,召回率就低了;若是想讓用戶感興趣的內容都被推送,那只有將全部內容都推送上,寧肯錯殺一千,不可放過一個,這樣準確率就很低了。blog
在實際工程中,咱們每每須要結合兩個指標的結果,去尋找一個平衡點,使綜合性能最大化。
P-R曲線(Precision Recall Curve)正是描述精確率/召回率變化的曲線,P-R曲線定義以下:根據學習器的預測結果(通常爲一個實值或機率)對測試樣本進行排序,將最多是「正例」的樣本排在前面,最不多是「正例」的排在後面,按此順序逐個把樣本做爲「正例」進行預測,每次計算出當前的P值和R值,以下圖所示:
P-R曲線如何評估呢?若一個學習器A的P-R曲線被另外一個學習器B的P-R曲線徹底包住,則稱:B的性能優於A。若A和B的曲線發生了交叉,則誰的曲線下的面積大,誰的性能更優。但通常來講,曲線下的面積是很難進行估算的,因此衍生出了「平衡點」(Break-Event Point,簡稱BEP),即當P=R時的取值,平衡點的取值越高,性能更優。
正如上文所述,Precision和Recall指標有時是此消彼長的,即精準率高了,召回率就降低,在一些場景下要兼顧精準率和召回率,最多見的方法就是F-Measure,又稱F-Score。F-Measure是P和R的加權調和平均,即: $$ \frac{1}{F_{\beta}}=\frac{1}{1+\beta^{2}} \cdot\left(\frac{1}{P}+\frac{\beta^{2}}{R}\right) $$
$$ F_{\beta}=\frac{\left(1+\beta^{2}\right) \times P \times R}{\left(\beta^{2} \times P\right)+R} $$
特別地,當β=1時,也就是常見的F1-Score,是P和R的調和平均,當F1較高時,模型的性能越好。 $$ \frac{1}{F 1}=\frac{1}{2} \cdot\left(\frac{1}{P}+\frac{1}{R}\right) $$
$$ F1=\frac{2 \times P \times R}{P+R} = \frac{2 \times TP}{樣例總數+TP-TN} $$
ROC以及後面要講到的AUC,是分類任務中很是經常使用的評價指標,本文將詳細闡述。可能有人會有疑問,既然已經這麼多評價標準,爲何還要使用ROC和AUC呢?
由於ROC曲線有個很好的特性:**當測試集中的正負樣本的分佈變化的時候,ROC曲線可以保持不變。**在實際的數據集中常常會出現類別不平衡(Class Imbalance)現象,即負樣本比正樣本多不少(或者相反),並且測試數據中的正負樣本的分佈也可能隨着時間變化,ROC以及AUC能夠很好的消除樣本類別不平衡對指標結果產生的影響。
另外一個緣由是,ROC和上面作提到的P-R曲線同樣,是一種不依賴於閾值(Threshold)的評價指標,在輸出爲機率分佈的分類模型中,若是僅使用準確率、精確率、召回率做爲評價指標進行模型對比時,都必須時基於某一個給定閾值的,對於不一樣的閾值,各模型的Metrics結果也會有所不一樣,這樣就很可貴出一個很置信的結果。
在正式介紹ROC以前,咱們還要再介紹兩個指標,這兩個指標的選擇使得ROC能夠無視樣本的不平衡。這兩個指標分別是:靈敏度(sensitivity)和特異度(specificity),也叫作真正率(TPR)和假正率(FPR),具體公式以下。
$$ TPR = \frac{正樣本預測正確數}{正樣本總數} = \frac{TP}{TP+FN} $$
其實咱們能夠發現靈敏度和召回率是如出一轍的,只是名字換了而已
$$ FNR = \frac{正樣本預測錯誤數}{正樣本總數} = \frac{FN}{TP+FN} $$
$$ FPR = \frac{負樣本預測錯誤數}{負樣本總數} = \frac{FP}{TN+FP} $$
$$ TNR = \frac{負樣本預測正確數}{負樣本總數} = \frac{TN}{TN+FP} $$
細分析上述公式,咱們能夠可看出,靈敏度(真正率)TPR是正樣本的召回率,特異度(真負率)TNR是負樣本的召回率,而假負率$FNR=1-TPR$、假正率$FPR=1-TNR$,上述四個量都是針對單一類別的預測結果而言的,因此對總體樣本是否均衡並不敏感。舉個例子:假設總樣本中,90%是正樣本,10%是負樣本。在這種狀況下咱們若是使用準確率進行評價是不科學的,可是用TPR和TNR倒是能夠的,由於TPR只關注90%正樣本中有多少是被預測正確的,而與那10%負樣本毫無關係,同理,FPR只關注10%負樣本中有多少是被預測錯誤的,也與那90%正樣本毫無關係。這樣就避免了樣本不平衡的問題。
ROC(Receiver Operating Characteristic)曲線,又稱接受者操做特徵曲線。該曲線最先應用於雷達信號檢測領域,用於區分信號與噪聲。後來人們將其用於評價模型的預測能力。ROC曲線中的主要兩個指標就是真正率TPR和假正率FPR,上面已經解釋了這麼選擇的好處所在。其中橫座標爲假正率(FPR),縱座標爲真正率(TPR),下面就是一個標準的ROC曲線圖。
與前面的P-R曲線相似,ROC曲線也是經過遍歷全部閾值來繪製整條曲線的。若是咱們不斷的遍歷全部閾值,預測的正樣本和負樣本是在不斷變化的,相應的在ROC曲線圖中也會沿着曲線滑動。
咱們看到改變閾值只是不斷地改變預測的正負樣本數,即TPR和FPR,可是曲線自己並無改變。這是有道理的,閾值並不會改變模型的性能。
那麼如何判斷一個模型的ROC曲線是好的呢?這個仍是要回歸到咱們的目的:FPR表示模型對於負樣本誤判的程度,而TPR表示模型對正樣本召回的程度。咱們所但願的固然是:負樣本誤判的越少越好,正樣本召回的越多越好。因此總結一下就是**TPR越高,同時FPR越低(即ROC曲線越陡),那麼模型的性能就越好。**參考以下動態圖進行理解。
即:進行模型的性能比較時,與PR曲線相似,若一個模型A的ROC曲線被另外一個模型B的ROC曲線徹底包住,則稱B的性能優於A。若A和B的曲線發生了交叉,則誰的曲線下的面積大,誰的性能更優。
前面已經對ROC曲線爲何能夠無視樣本不平衡作了解釋,下面咱們用動態圖的形式再次展現一下它是如何工做的。咱們發現:不管紅藍色樣本比例如何改變,ROC曲線都沒有影響。
AUC(Area Under Curve)又稱爲曲線下面積,是處於ROC Curve下方的那部分面積的大小。上文中咱們已經提到,對於ROC曲線下方面積越大代表模型性能越好,因而AUC就是由此產生的評價指標。一般,AUC的值介於0.5到1.0之間,較大的AUC表明了較好的Performance。若是模型是完美的,那麼它的AUC = 1,證實全部正例排在了負例的前面,若是模型是個簡單的二類隨機猜想模型,那麼它的AUC = 0.5,若是一個模型好於另外一個,則它的曲線下方面積相對較大,對應的AUC值也會較大。
AUC對全部可能的分類閾值的效果進行綜合衡量。首先AUC值是一個機率值,能夠理解爲隨機挑選一個正樣本以及一個負樣本,分類器斷定正樣本分值高於負樣本分值的機率就是AUC值。簡言之,AUC值越大,當前的分類算法越有可能將正樣本分值高於負樣本分值,即可以更好的分類。
混淆矩陣(Confusion Matrix)又被稱爲錯誤矩陣,經過它能夠直觀地觀察到算法的效果。它的每一列是樣本的預測分類,每一行是樣本的真實分類(反過來也能夠),顧名思義,它反映了分類結果的混淆程度。混淆矩陣$i$行$j$列的原始是本來是類別$i$卻被分爲類別$j$的樣本個數,計算完以後還能夠對之進行可視化:
對於多分類問題,或者在二分類問題中,咱們有時候會有多組混淆矩陣,例如:屢次訓練或者在多個數據集上訓練的結果,那麼估算全局性能的方法有兩種,分爲宏平均(macro-average)和微平均(micro-average)。簡單理解,宏平均就是先算出每一個混淆矩陣的P值和R值,而後取得平均P值macro-P和平均R值macro-R,再算出$Fβ$或$F1$,而微平均則是計算出混淆矩陣的平均TP、FP、TN、FN,接着進行計算P、R,進而求出$Fβ$或$F1$。其它分類指標同理,都可以經過宏平均/微平均計算得出。 $$ \operatorname{macro}P=\frac{1}{n} \sum_{i=1}^{n} P_{i} $$
$$ \operatorname{macro}R=\frac{1}{n} \sum_{i=1}^{n} R_{i} $$
$$ \operatorname{macro} F 1=\frac{2 \times \operatorname{macro} P \times \operatorname{macro} R}{\operatorname{macro} P+\operatorname{macro}R} $$
$$ \operatorname{micro} P=\frac{\overline{T P}}{\overline{T P}+\overline{F P}} $$
$$ \operatorname{micro}R=\frac{\overline{T P}}{\overline{T P}+\overline{F N}} $$
$$ \operatorname{micro} F 1=\frac{2 \times \operatorname{micro} P \times \operatorname{micro} R}{\operatorname{micro} P+\operatorname{micro}R} $$
須要注意的是,在多分類任務場景中,若是非要用一個綜合考量的metric的話,宏平均會比微平均更好一些,由於宏平均受稀有類別影響更大。宏平均平等對待每個類別,因此它的值主要受到稀有類別的影響,而微平均平等考慮數據集中的每個樣本,因此它的值受到常見類別的影響比較大。
原文出處:https://www.cnblogs.com/guoyaohua/p/classification-metrics.html