机器学习 | 分类评估指标
文章目錄
- 1. 分類評估指標
- 1.1 混淆矩陣 Confusion Matrix
- 1.1.1 scikit-learn 混淆矩陣函數接口
- 1.2 真陽性TP、假陽性FP、真陰性TN、假陰性FN
- 1.2.1 衍生評估指標
- 1.3 準確率 Accuracy
- 1.3.1 準確率不適用的情形:信用卡欺詐檢測模型(不平衡數據)
- 1.4 精確率 Precision
- 1.4.1 精確率適用情形:垃圾郵件分類(高精度模型)
- 1.5 召回率 Recall
- 1.5.1 召回率適用情形:醫療模型
- 1.6 F_1 Score
- 1.7 F_beta Score
- 1.8 ROC 曲線
- 1.8.1 AUC
- 1.8.2 PR 曲線
- 2. Sklearn 計算分類器性能指標
- 參考資料
相關文章:
機器學習 | 目錄
機器學習 | 回歸評估指標
1. 分類評估指標
評估指標(Evaluation Matrix):在建立模型后,我們想要知道它的性能如何,因此我們將通過一系列指標來判斷一個模型的好壞。
1.1 混淆矩陣 Confusion Matrix
混淆矩陣也稱誤差矩陣,是表示精度評價的一種標準格式,用nnn行nnn列的矩陣形式來表示。在人工智能中,混淆矩陣(Confusion Matrix)是誤差可視化工具,特別用于監督學習;在無監督學習一般叫做匹配矩陣。
混淆矩陣
每一列代表了預測類別,每一列的總數表示預測為該類別的數據的數目
每一行代表了數據的真實歸屬類別,每一行的數據總數表示該類別的數據實例的數目。每一列中的數值表示真實數據被預測為該類的數目
每一行之和表示該類別的真實樣本數量,每一列之和表示被預測為該類別的樣本數量
如下圖,第一行第一列中的43表示有43個實際歸屬第一類的實例被預測為第一類,同理,第一行第二列的2表示有2個實際歸屬為第一類的實例被錯誤預測為第二類。
1.1.1 scikit-learn 混淆矩陣函數接口
skearn.metrics.confusion_matrix(y_true, # array, Gound true (correct) target valuesy_pred, # array, Estimated targets as returned by a classifierlabels=None, # array, List of labels to index the matrix.sample_weight=None # array-like of shape = [n_samples], Optional sample weights )參數設置:
y_true : array, shape = [n_samples]
Ground truth (correct) target values.y_pred : array, shape = [n_samples]
Estimated targets as returned by a classifier.labels : array, shape = [n_classes], optional
List of labels to index the matrix. This may be used to reorder or select a subset of labels. If none is given, those that appear at least once in y_true or y_pred are used in sorted order.sample_weight : array-like of shape = [n_samples], optional
Sample weights.返回值:
array, shape = [n_classes, n_classes]
Confusion matrix在 scikit-learn 中, 計算混淆矩陣用來評估分類的準確度。
按照定義, 混淆矩陣CCC中的元素Ci,jC_{i,j}Ci,j?為真實值的為組iii, 而預測為組jjj的觀測數(the number of observations)。
對于二分類任務, 預測結果中:
- 真陽數(True Positives, TP)為C1,1C_{1,1}C1,1?
- 真陰數(True Negatives, TN)為C0,0C_{0,0}C0,0?
- 假陽數(False Posiives, FN)為C1,0C_{1,0}C1,0?
- 假陰數(False Negatives, FN)為C1,0C_{1,0}C1,0?
如果 labels 為 None, scikit-learn 會把在出現在 y_true 或 y_pred 中的所有值添加到標記列表 labels 中, 并排好序。[1]
sklearn.metrics.confusion_matrix 官方文檔
1.2 真陽性TP、假陽性FP、真陰性TN、假陰性FN
對于二分類任務:
- 真陽性(True Positives, TP)為真實值為1,預測值為1,即正確預測出的正樣本個數
- 真陰性(True Negatives, TN)為真實值為0,預測值為0,即正確預測出的負樣本個數
- 假陽性(False Posiives, FP)為真實值為0,預測值為1,即錯誤預測出的正樣本個數(即數理統計的第一類錯誤)
- 假陰性(False Negatives, FN)為真實值為1,預測值為0,即錯誤預測出的負樣本個數(即數理統計的第二類錯誤)
概括地來說:
- 當預測值為1時,體現為陽性;當預測值為0時,體現為陰性
- 當預測值與真實值相符時,為真;當預測值與真實值相反時,為假
陽性、陰性由來:這兩個概念是從醫學上引進的,一般來說,陽性(+)是表示疾病或體內生理的變化有一定的結果。相反,化驗單或報告單上的陰性(-),則多數基本上否定或排除某種病變的可能性。
例1. 計算真陽性、假陽性、真陰性、假陰性:
如圖所示,藍色為陽性,紅色為陰性;我們訓練的模型是一條直線來劃分這個區域,陽性區域在上,陰性區域在下。
因此直線上方的點預測值為1,其中6個藍點的真實值為1,2個兩紅點的真實值為0,因此真陽性個數為6,假陽性個數為2;直線下方的點預測值為0,其中5個紅點真實值為0,1個藍點真實值為1,因此真陰性個數為5,假陰性個數為1。最終混淆矩陣如下所示:
1.2.1 衍生評估指標
由TP、FP、TN、FN四個指標,可以進一步衍生出其他三個常用的評價分類器性能的指標:
(1)Accuracy=TP+TNTP+FP+TN+FNAccuracy=\frac{TP+TN}{TP+FP+TN+FN}\tag{1}Accuracy=TP+FP+TN+FNTP+TN?(1)
(2)Precision=TPTP+FPPrecision=\frac{TP}{TP+FP}\tag{2}Precision=TP+FPTP?(2)
(3)Recall=TPTP+FNRecall=\frac{TP}{TP+FN}\tag{3}Recall=TP+FNTP?(3)
我們將會在后面對這些指標進行說明。
這是所有的衍生指標:
1.3 準確率 Accuracy
準確率(Accuracy):分類器預測出的正樣本中,真實正樣本的比例,計算公式如下:
(4)Accuracy=TP+TNTP+FP+TN+FNAccuracy=\frac{TP+TN}{TP+FP+TN+FN}\tag{4}Accuracy=TP+FP+TN+FNTP+TN?(4)
例2. 假設一個垃圾郵件過濾器模型,在270封垃圾郵件中,正確分類100封,錯誤分類170封;在730封正常郵件中,正確分類700封,錯誤分類30封,計算該分類器的準確率:
Accuracy=TP+TNTP+FP+TN+FN=100+700100+30+700+170=80%Accuracy=\frac{TP+TN}{TP+FP+TN+FN}=\frac{100+700}{100+30+700+170}=80\%Accuracy=TP+FP+TN+FNTP+TN?=100+30+700+170100+700?=80%
1.3.1 準確率不適用的情形:信用卡欺詐檢測模型(不平衡數據)
不平衡數據:一個類別比另一個類別出現次數多得多的數據集,對于不平衡數據,不適合使用準確流來評估模型。
我們來看一個準確率不適用的情形,假設我們建立一個檢測信用卡欺詐行為的模型,數據中有284,335條良好交易記錄、472條欺詐性交易數據,假設我們的模型預測結果如下:
這個模型的準確率為:
Accuracy=TP+TNTP+FP+TN+FN=284335+0284335+472+0+0=99.83%Accuracy=\frac{TP+TN}{TP+FP+TN+FN}=\frac{284335+0}{284335+472+0+0}=99.83\%Accuracy=TP+FP+TN+FNTP+TN?=284335+472+0+0284335+0?=99.83%
準確率很高,達到了99.83%99.83\%99.83%,但這并不說明這是一個好的模型,因為我們的模型是為了檢測出欺詐數據,但這個模型一條欺詐數據也沒有檢測出來。因此在這個情形下,我們需要選擇其他的評價指標來評價我們的模型。
1.4 精確率 Precision
精確率(Precision):又稱精度,體現分類器對整體的判斷能力,即正確預測的比例(在所有預測為陽性的點中,真陽性的比例),計算公式如下:
(5)Precision=TPTP+FPPrecision=\frac{TP}{TP+FP}\tag{5}Precision=TP+FPTP?(5)
1.4.1 精確率適用情形:垃圾郵件分類(高精度模型)
在垃圾郵件分類模型中,檢測假陽性更重要:
假陰性意味著垃圾郵件將發到你的收件箱中。有點不太方便,但是可接受。而 假陽性意味著漏掉了重要的郵件,這是需要避免的。
例3. 以下面的圖為例,
精確率為100100+30=76.9%\frac{100}{100+30}=76.9\%100+30100?=76.9%,
召回率為100100+170=37.0\frac{100}{100+170}=37.0%100+170100?=37.0,
因此即使召回率只有37.0%37.0\%37.0%,但是精確率有76.9%76.9\%76.9%,所以我們仍稱這是一個好的模型。
1.5 召回率 Recall
召回率(Recall):又稱靈敏度、真陽性率,為所有真實正樣本中,分類器中能找到多少,計算公式如下:
(6)Recall=TPTP+FNRecall=\frac{TP}{TP+FN}\tag{6}Recall=TP+FNTP?(6)
1.5.1 召回率適用情形:醫療模型
在醫療模型中,檢測假陰性更重要:
假陽性意味著讓健康人接受進一步檢查,即使這意味會帶來不便,但是可以接受。而假陰性以為著讓病人錯過治療,這是更需要避免的。
例4. 以下面的圖為例,精確率為10001000+800=55.6%\frac{1000}{1000+800}=55.6\%1000+8001000?=55.6%,召回率為10001000+200=83.3\frac{1000}{1000+200}=83.3%1000+2001000?=83.3,因此即使精確率只有55.6%55.6\%55.6%,但是召回率有83.3%83.3\%83.3%,所以我們仍稱這是一個好的模型。
1.6 F_1 Score
F1F_1F1? 得分是統計學中用來衡量二分類模型精確度的一種指標。它同時兼顧了分類模型的精確率和召回率。
F1F_1F1?得分是精確率和召回率的一種調和平均,當精確率或召回率其中一個較小時,F1F_1F1? 得分將會較小;只有當兩者都較大時,F1F_1F1? 得分才會接近1。
(7)F1=2×Precision×RecallPrecision+RecallF_1 = 2 \times \frac{Precision\times Recall}{Precision+Recall}\tag{7}F1?=2×Precision+RecallPrecision×Recall?(7)
F1F_1F1? 得分的取值域為[0,1][0,1][0,1]。
1.7 F_beta Score
FβF_\betaFβ?的物理意義就是將準確率和召回率這兩個分值合并為一個分值,在合并的過程中,召回率的權重是準確率的β\betaβ倍。F1F_1F1?分數認為召回率和準確率同等重要,F2F_2F2?分數認為召回率的重要程度是準確率的2倍,而F0.5F_{0.5}F0.5?分數認為召回率的重要程度是準確率的一半。
(8)Fβ=(1+β2)Precision×Recallβ2×Precision+Recallβ∈[0,+∞)F_{\beta}=(1+\beta^2)\frac{Precision \times Recall} {\beta^2 \times Precision+Recall}\quad \beta\in[0,+\infty) \tag{8}Fβ?=(1+β2)β2×Precision+RecallPrecision×Recall?β∈[0,+∞)(8)
FβF_\betaFβ? 得分的取值域為[0,1][0,1][0,1]。
-
當β=1\beta=1β=1時,即為 F1 得分:
Fβ=1=(1+1)Precision×RecallPrecision+Recall=2×Precision×RecallPrecision+Recall=F1F_{\beta=1}=(1+1)\frac{Precision \times Recall} {Precision+Recall}= 2 \times \frac{Precision\times Recall}{Precision+Recall}=F_1Fβ=1?=(1+1)Precision+RecallPrecision×Recall?=2×Precision+RecallPrecision×Recall?=F1?
-
當β=0\beta=0β=0時,即為精確度:
Fβ=0=(1+0)Precision×Recall0×Precision+Recall=PrecisionF_{\beta=0}=(1+0)\frac{Precision \times Recall} {0\times Precision+Recall}=PrecisionFβ=0?=(1+0)0×Precision+RecallPrecision×Recall?=Precision
-
當β=∞\beta=\inftyβ=∞時,即為召回率:
Fβ=N=(1+N2)Precision×RecallN2×Precision+Recall=Precision×RecallN21+N2Precision+11+N2RecallF_{\beta=N}=(1+N^2)\frac{Precision \times Recall} {N^2\times Precision+Recall} =\frac{Precision \times Recall} {\frac{N^2}{1+N^2}Precision+\frac{1}{1+N^2}Recall}Fβ=N?=(1+N2)N2×Precision+RecallPrecision×Recall?=1+N2N2?Precision+1+N21?RecallPrecision×Recall?
令N→∞N \rightarrow \inftyN→∞,有:
lim?N→∞FN=Precision×Recall1×Precision+Recall=Recall\lim \limits_{N \to \infty}F_N = \frac{Precision \times Recall}{1 \times Precision+Recall} = RecallN→∞lim?FN?=1×Precision+RecallPrecision×Recall?=Recall
1.8 ROC 曲線
ROC 曲線:接受者操作特征曲線(Receiver Operating Characterostoc Curve ),roc曲線上每個點反映著對同一信號刺激的感受性。[2]
x 軸:FPR 假陽性率(誤診率)TPFP+TN\frac{TP}{FP+TN}FP+TNTP?
y 軸:TPR 真陽性率(召回率、靈敏度) TPTP+FN\frac{TP}{TP+FN}TP+FNTP?
一般認為,如果 ROC 曲線是光滑的,那么基本可以判斷沒有太大的過擬合,AUC 面積越大一般認為模型更好。
ROC 曲線由來:ROC曲線,首先是由二戰中的電子工程師和雷達工程師發明的,用來偵測戰場上的敵軍載具(飛機、船艦),也就是信號檢測理論。之后很快就被引入了心理學來進行信號的知覺檢測。此后被引入機器學習領域,用來評判分類、檢測結果的好壞。因此,ROC曲線是非常重要和常見的統計分析方法。
以疾病檢測為例,這是一個有監督的二分類模型,模型對每個樣本的預測結果為一個概率值,我們需要從中選取一個閾值來判斷健康與否。
定好一個閾值之后,超過此閾值定義為不健康,低于此閾值定義為健康,就可以得出混淆矩陣。
而如果在上述模型中我們沒有定好閾值,而是將模型預測結果從高到低排序,將每次概率值依次作為閾值,那么就可以得到多個混淆矩陣。對于每個混淆矩陣,我們計算兩個指標 TPR 和 FPR ,以 FPR 為 x 軸,TPR 為 y 軸畫圖,就得到了 ROC 曲線。
1.8.1 AUC
AUC 被定義為ROC曲線下的面積,取值范圍一般在0.5和1之間。使用AUC值作為評價標準是因為很多時候ROC曲線并不能清晰的說明哪個分類器的效果更好,而作為一個數值,對應AUC更大的分類器效果更好。
非參數法:(兩種方法實際證明是一致的)
(1) 梯形法則:早期由于測試樣本有限,我們得到的AUC曲線呈階梯狀。曲線上的每個點向X軸做垂線,得到若干梯形,這些梯形面積之和也就是AUC 。
(2) Mann-Whitney統計量: 統計正負樣本對中,有多少個組中的正樣本的概率大于負樣本的概率。這種估計隨著樣本規模的擴大而逐漸逼近真實值。
參數法:
(3) 主要適用于二項分布的數據,即正反樣本分布符合正態分布,可以通過均值和方差來計算。
(1) AUC = 1,是完美分類器,采用這個預測模型時,存在至少一個閾值能得出完美預測。絕大多數預測的場合,不存在完美分類器。
(2) 0.5 < AUC < 1,優于隨機猜測。這個分類器(模型)妥善設定閾值的話,能有預測價值。
(3) AUC = 0.5,跟隨機猜測一樣(例:丟銅板),模型沒有預測價值。
(4) AUC < 0.5,比隨機猜測還差;但只要總是反預測而行,就優于隨機猜測。
三種 AUC 值的實例:
總的來說,AUC值越大,模型的分類效果越好,疾病檢測越準確;不過兩個模型AUC值相等并不代表模型效果相同,如下圖中有三條ROC曲線,A模型比B和C都要好:
而下面兩幅圖中兩條ROC曲線相交于一點,AUC值幾乎一樣:當需要高Sensitivity(TPR)時,模型A比B好;當需要高Speciticity(TNR)時,模型B比A好。
1.8.2 PR 曲線
x 軸:Recall(TPR,與 ROC 曲線的 y 軸相同)
y 軸:Precision 精確率
相對來講ROC曲線會穩定很多,在正負樣本量都足夠的情況下,ROC曲線足夠反映模型的判斷能力。因此,對于同一模型,PRC和ROC曲線都可以說明一定的問題,而且二者有一定的相關性,如果想評測模型效果,也可以把兩條曲線都畫出來綜合評價。對于有監督的二分類問題,在正負樣本都足夠的情況下,可以直接用ROC曲線、AUC、KS評價模型效果。在確定閾值過程中,可以根據Precision、Recall或者F1來評價模型的分類效果。對于多分類問題,可以對每一類分別計算Precision、Recall和F1,綜合作為模型評價指標。
在上圖中,(a)和?為ROC曲線,(b)和(d)為Precision-Recall曲線。(a)和(b)展示的是分類其在原始測試集(正負樣本分布平衡)的結果,?和(d)是將測試集中負樣本的數量增加到原來的10倍后,分類器的結果。可以明顯的看出,ROC曲線基本保持原貌,而Precision-Recall曲線則變化較大。
2. Sklearn 計算分類器性能指標
sklearn.metrics 官方文檔
from sklearn.metrics import accuracy_scorey_pred = [0, 2, 1, 3] y_true = [0, 1, 2, 3] accuracy_score(y_true, y_pred) 0.5-
分類報告,同時返回Precision、Recall、F1F_1F1? Score
classification_report(y_true, y_pred[, …]) Build a text report showing the main classification metrics
-
混淆矩陣 Confusion Matrix
metrics.confusion_matrix(y_true, y_pred[, …]) Compute confusion matrix to evaluate the accuracy of a classification
-
準確率 Accuracy
metrics.accuracy_score(y_true, y_pred[, …]) Accuracy classification score.
-
平均準確率 average accuracy (TPR+TNR)/2
metrics.balanced_accuracy_score(y_true, y_pred) Compute the balanced accuracy
-
精確率 Precision
metrics.precision_score(y_true, y_pred[, …]) Compute the precision
-
召回率 Recall
metrics.recall_score(y_true, y_pred[, …]) Compute the recall
-
F1F_1F1? Score
metrics.f1_score(y_true, y_pred[, labels, …]) Compute the F1 score, also known as balanced F-score or F-measure
-
FβF_\betaFβ? Score
metrics.fbeta_score(y_true, y_pred, beta[, …]) Compute the F-beta score
-
ROC 曲線
metrics.roc_curve(y_true, y_score[, …]) Compute Receiver operating characteristic (ROC)
-
AUC (梯型法)
metrics.auc(x, y[, reorder]) Compute Area Under the Curve (AUC) using the trapezoidal rule
-
AUC (Mann-Whitney統計量法)
metrics.roc_auc_score(y_true, y_score[, …]) Compute Area Under the Receiver Operating Characteristic Curve (ROC AUC) from prediction scores.
-
PR 曲線
metrics.precision_recall_curve(y_true, …) Compute precision-recall pairs for different probability thresholds
參考資料
[1] klchang.混淆矩陣(Confusion matrix)的原理及使用(scikit-learn 和 tensorflow)[EB/OL].https://www.cnblogs.com/klchang/p/9608412.html, 2018-09-08.
[2] dzl_ML.分類器性能指標之ROC曲線、AUC值[EB/OL].https://www.cnblogs.com/dlml/p/4403482.html, 2015-04-08.
總結
以上是生活随笔為你收集整理的机器学习 | 分类评估指标的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Synergy工具 共享Windows系
- 下一篇: Adobe illustrator 显示