ROC与AUC的定义与使用详解
原博文地址
ROC曲線 vs Precision-Recall曲線
分類模型評(píng)估:
| Precision | 精準(zhǔn)度 | from sklearn.metrics import precision_score |
| Recall | 召回率 | from sklearn.metrics import recall_score |
| F1 | F1值 | from sklearn.metrics import f1_score |
| Confusion Matrix | 混淆矩陣 | from sklearn.metrics import confusion_matrix |
| ROC | ROC曲線 | from sklearn.metrics import roc |
| AUC | ROC曲線下的面積 | from sklearn.metrics import auc |
回歸模型評(píng)估:
| Mean Square Error (MSE, RMSE) | 平均方差 | from sklearn.metrics import mean_squared_error |
| Absolute Error (MAE, RAE) | 絕對(duì)誤差 | from sklearn.metrics import mean_absolute_error, median_absolute_error |
| R-Squared | R平方值 | from sklearn.metrics import r2_score |
ROC和AUC定義
ROC全稱是“受試者工作特征”(Receiver Operating Characteristic)。ROC曲線的面積就是AUC(Area Under the Curve)。AUC用于衡量“二分類問題”機(jī)器學(xué)習(xí)算法性能(泛化能力)。
計(jì)算ROC需要知道的關(guān)鍵概念
首先,解釋幾個(gè)二分類問題中常用的概念:True Positive,?False Positive,?True Negative,?False Negative。它們是根據(jù)真實(shí)類別與預(yù)測類別的組合來區(qū)分的。
假設(shè)有一批test樣本,這些樣本只有兩種類別:正例和反例。機(jī)器學(xué)習(xí)算法預(yù)測類別如下圖(左半部分預(yù)測類別為正例,右半部分預(yù)測類別為反例),而樣本中真實(shí)的正例類別在上半部分,下半部分為真實(shí)的反例。
- 預(yù)測值為正例,記為P(Positive)
- 預(yù)測值為反例,記為N(Negative)
- 預(yù)測值與真實(shí)值相同,記為T(True)
- 預(yù)測值與真實(shí)值相反,記為F(False)
-
-
TP:預(yù)測類別是P(正例),真實(shí)類別也是P
- FP:預(yù)測類別是P,真實(shí)類別是N(反例)
- TN:預(yù)測類別是N,真實(shí)類別也是N
- FN:預(yù)測類別是N,真實(shí)類別是P
樣本中的真實(shí)正例類別總數(shù)即TP+FN。TPR即True Positive Rate,TPR = TP/(TP+FN)。?
同理,樣本中的真實(shí)反例類別總數(shù)為FP+TN。FPR即False Positive Rate,FPR=FP/(TN+FP)。
還有一個(gè)概念叫”截?cái)帱c(diǎn)”。機(jī)器學(xué)習(xí)算法對(duì)test樣本進(jìn)行預(yù)測后,可以輸出各test樣本對(duì)某個(gè)類別的相似度概率。比如t1是P類別的概率為0.3,一般我們認(rèn)為概率低于0.5,t1就屬于類別N。這里的0.5,就是”截?cái)帱c(diǎn)”。?
總結(jié)一下,對(duì)于計(jì)算ROC,最重要的三個(gè)概念就是TPR,?FPR,?截?cái)帱c(diǎn)。
截?cái)帱c(diǎn)取不同的值,TPR和FPR的計(jì)算結(jié)果也不同。將截?cái)帱c(diǎn)不同取值下對(duì)應(yīng)的TPR和FPR結(jié)果畫于二維坐標(biāo)系中得到的曲線,就是ROC曲線。橫軸用FPR表示。
sklearn計(jì)算ROC
sklearn給出了一個(gè)計(jì)算ROC的例子[1]。
- 1
- 2
- 3
通過計(jì)算,得到的結(jié)果(TPR,?FPR,?截?cái)帱c(diǎn))為
- fpr = array([ 0. , 0.5, 0.5, 1. ])
- tpr = array([ 0.5, 0.5, 1. , 1. ])
- thresholds = array([ 0.8 , 0.4 , 0.35, 0.1 ])#截?cái)帱c(diǎn)
- 1
- 2
- 3
- 1
- 2
- 3
將結(jié)果中的FPR與TPR畫到二維坐標(biāo)中,得到的ROC曲線如下(藍(lán)色線條表示),ROC曲線的面積用AUC表示(淡黃色陰影部分)。
詳細(xì)計(jì)算過程
上例給出的數(shù)據(jù)如下
- 1
- 2
- 1
- 2
用這個(gè)數(shù)據(jù),計(jì)算TPR,FPR的過程是怎么樣的呢?
1. 分析數(shù)據(jù)
y是一個(gè)一維數(shù)組(樣本的真實(shí)分類)。數(shù)組值表示類別(一共有兩類,1和2)。我們假設(shè)y中的1表示反例,2表示正例。即將y重寫為:
y_true = [0, 0, 1, 1]- 1
- 1
score即各個(gè)樣本屬于正例的概率。
2. 針對(duì)score,將數(shù)據(jù)排序
| y[0] | 0.1 | N |
| y[2] | 0.35 | P |
| y[1] | 0.4 | N |
| y[3] | 0.8 | P |
3. 將截?cái)帱c(diǎn)依次取為score值
將截?cái)帱c(diǎn)依次取值為0.1,0.35,0.4,0.8時(shí),計(jì)算TPR和FPR的結(jié)果。
3.1?截?cái)帱c(diǎn)為0.1
說明只要score>=0.1,它的預(yù)測類別就是正例。?
此時(shí),因?yàn)?個(gè)樣本的score都大于等于0.1,所以,所有樣本的預(yù)測類別都為P。
- 1
- 2
- 3
- 1
- 2
- 3
TPR = TP/(TP+FN) = 1?
FPR = FP/(TN+FP) = 1
3.2?截?cái)帱c(diǎn)為0.35
說明只要score>=0.35,它的預(yù)測類別就是P。?
此時(shí),因?yàn)?個(gè)樣本的score有3個(gè)大于等于0.35。所以,所有樣本的預(yù)測類有3個(gè)為P(2個(gè)預(yù)測正確,1一個(gè)預(yù)測錯(cuò)誤);1個(gè)樣本被預(yù)測為N(預(yù)測正確)。
- 1
- 2
- 3
- 1
- 2
- 3
TPR = TP/(TP+FN) = 1?
FPR = FP/(TN+FP) = 0.5
3.3?截?cái)帱c(diǎn)為0.4
說明只要score>=0.4,它的預(yù)測類別就是P。?
此時(shí),因?yàn)?個(gè)樣本的score有2個(gè)大于等于0.4。所以,所有樣本的預(yù)測類有2個(gè)為P(1個(gè)預(yù)測正確,1一個(gè)預(yù)測錯(cuò)誤);2個(gè)樣本被預(yù)測為N(1個(gè)預(yù)測正確,1一個(gè)預(yù)測錯(cuò)誤)。
- 1
- 2
- 3
- 1
- 2
- 3
TPR = TP/(TP+FN) = 0.5?
FPR = FP/(TN+FP) = 0.5
3.4?截?cái)帱c(diǎn)為0.8
說明只要score>=0.8,它的預(yù)測類別就是P。所以,所有樣本的預(yù)測類有1個(gè)為P(1個(gè)預(yù)測正確);3個(gè)樣本被預(yù)測為N(2個(gè)預(yù)測正確,1一個(gè)預(yù)測錯(cuò)誤)。
- 1
- 2
- 3
- 1
- 2
- 3
TPR = TP/(TP+FN) = 0.5?
FPR = FP/(TN+FP) = 0
心得
用下面描述表示TPR和FPR的計(jì)算過程,更容易記住
- TPR:真實(shí)的正例中,被預(yù)測正確的比例
- FPR:真實(shí)的反例中,被預(yù)測正確的比例
最理想的分類器,就是對(duì)樣本分類完全正確,即FP=0,FN=0。所以理想分類器TPR=1,FPR=0。
參考:
總結(jié)
以上是生活随笔為你收集整理的ROC与AUC的定义与使用详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: np.meshgrid
- 下一篇: sklearn:auc、roc_curv