在《理解交叉驗(yàn)證》一文中竹观,我們談到了使用 AUC 來對(duì)比不同模型的好壞,那么 AUC 是什么?它是如何衡量一個(gè)模型的好壞的呢岛琼?除了 AUC 以外掖看,還有其他評(píng)估手段嗎芹枷?本文我們就來探討下這幾個(gè)問題弟孟。
混淆矩陣
要了解 AUC,我們需要從另外一個(gè)概念——混淆矩陣(Confusion Matrix)說起亚斋,混淆矩陣是一個(gè) 2 維方陣作媚,它主要用于評(píng)估二分類問題(例如:預(yù)測患或未患心臟病、股票漲或跌等這種只有兩類情況的問題)的好壞帅刊。你可能會(huì)問多分類問題怎么辦纸泡?實(shí)際上,多分類問題依然可以轉(zhuǎn)換為二分類問題進(jìn)行處理赖瞒。下圖是一個(gè)用于評(píng)判是否患有心臟病的混淆矩陣:
縱向看混淆矩陣女揭,它體現(xiàn)了真實(shí)情況下,患病和未患病的人數(shù)栏饮,上圖中吧兔,真實(shí)患心臟病的人數(shù)為 True Positive + False Negative,未患心臟病的人數(shù)為 False Positive + True Negative袍嬉;類似的境蔼,橫向看混淆矩陣灶平,它體現(xiàn)了模型預(yù)測出來患心臟病的人數(shù)為 True Positive + False Positive,而預(yù)測未患心臟病的人數(shù)為 False Negative + True Negative箍土。
兩個(gè)方向一起看逢享,預(yù)測患病且實(shí)際也患病,我們稱它為真陽性 (True Positive)涮帘,預(yù)測未患病且實(shí)際也未患病拼苍,被稱為真陰性 (True Negative),這兩個(gè)區(qū)域是模型預(yù)測正確的部分调缨;模型預(yù)測錯(cuò)誤也分兩種情況,假陽性 (False Positive) 表示預(yù)測患病吆你,但實(shí)際卻未患病弦叶,假陰性 (False Negative) 表示預(yù)測未患病,但實(shí)際卻患了病的情況妇多。
概念有點(diǎn)多伤哺,但并不難記,可以看到者祖,這些名詞都是圍繞著預(yù)測來命名的——預(yù)測患病時(shí)被稱為「True/False Positive」立莉,預(yù)測未患病時(shí)被稱為 「True/False Negative」。
上圖中七问,模型預(yù)測正確的部分用綠色填充蜓耻,它所占的比例又被稱為準(zhǔn)確率 (Accuracy):
單靠準(zhǔn)確率這一項(xiàng),并不足以評(píng)估模型的好壞械巡,例如下面這種情況刹淌,雖然準(zhǔn)確率可以達(dá)到 80%,但在實(shí)際患病的人群中讥耗,該模型的預(yù)測成功率只有 50%有勾,很明顯它不是一個(gè)好模型。
患心臟病 | 未患心臟病 | |
---|---|---|
患心臟病 | 10 | 10 |
未患心臟病 | 10 | 70 |
Sensitivity 和 Specificity
所以古程,我們需要引入更多的衡量指標(biāo)蔼卡,Sensitivity (或 Recall) 表示實(shí)際患者中,預(yù)測患病成功的概率挣磨,同時(shí) Sensitivity 這個(gè)詞也有"過敏"的意思雇逞,和患病對(duì)應(yīng),這樣關(guān)聯(lián)起來比較好記:
既然有衡量患睬骷薄(正樣例)的指標(biāo)喝峦,那肯定也有衡量未患病(負(fù)樣例)的指標(biāo)呜达,Specificity 就是用來表示實(shí)際未患病的人群中谣蠢,預(yù)測未患病成功的概率,即
Specificity 這個(gè)詞有"免疫"的意思,能和未患病相關(guān)聯(lián)眉踱,所以也很好記挤忙。
這兩個(gè)指標(biāo)的出現(xiàn),能更好的幫你比較模型間的差異谈喳,并在其中做出取舍册烈。例如當(dāng)兩個(gè)模型的 Accuracy 相近時(shí),如果你更看重于預(yù)測患病的效果婿禽,你應(yīng)該選 Sensitivity 值較高的赏僧;相反,如果你更看重于預(yù)測未患病的效果扭倾,你就應(yīng)該選擇 Specificity 較高的淀零。
ROC 曲線、AUC 和 F1 Score
更進(jìn)一步膛壹,我們還可以通過將這些指標(biāo)圖形化驾中,以獲得更直觀的評(píng)估結(jié)果,ROC (Receiver Operating Characteristic) 曲線就是其中常用的一種模聋。
我們知道肩民,分類模型(例如"邏輯回歸”)的結(jié)果是一個(gè)大于 0 且小于 1 的概率,此時(shí)我們還需要一個(gè)閾值链方,才能界定是否患病持痰,通常我們把閾值設(shè)為 0.5,這樣當(dāng)結(jié)果大于 0.5 時(shí)可判定為患病侄柔,否則判定為未患病共啃。
而閾值可以取 0 到 1 之間的任意一個(gè)值,對(duì)每一個(gè)閾值暂题,都有一個(gè)混淆矩陣與之對(duì)應(yīng)移剪,有了混淆矩陣,我們就可以求出一對(duì) Sensitivity 和 Specificity薪者,通過這兩個(gè)數(shù)纵苛,我們就可以在一個(gè)以 1-Specificity 為橫坐標(biāo),Sensitivity 為縱坐標(biāo)的坐標(biāo)系上畫一個(gè)點(diǎn)言津,把所有可能的閾值所產(chǎn)出的點(diǎn)連起來攻人,就是 ROC 曲線。
下面我們來看一個(gè)具體的例子悬槽,假設(shè)我們對(duì)老鼠做研究怀吻,希望通過老鼠的體重來預(yù)測其患心臟病的概率,我們采用邏輯回歸算法來建模初婆,下圖是預(yù)測結(jié)果蓬坡,圖中有 10 個(gè)老鼠樣本點(diǎn)猿棉,其中紅色點(diǎn)代表實(shí)際健康的老鼠,藍(lán)色點(diǎn)代表實(shí)際患病的老鼠屑咳,這些點(diǎn)用一條邏輯回歸曲線擬合萨赁,圖中還有一條 P=0.5 的直線用來表示閾值為 0.5,可以看出兆龙,高于 P=0.5 的 5 只老鼠被預(yù)測為患病杖爽,而其他 5 只老鼠被預(yù)測為健康,預(yù)測成功率(Accuracy)為 80%:
下面我們通過以上數(shù)據(jù)紫皇,來畫一條 ROC 曲線慰安。首先取閾值為 1,此時(shí)所有的老鼠都被預(yù)測為未患病坝橡,根據(jù)樣本真實(shí)患病情況泻帮,我們可以得到如下混淆矩陣
根據(jù)上述混淆矩陣,我們就可以算出一組 Sensitivity 和 Specificity 的值计寇。接著我們不斷調(diào)整閾值,以獲得所有的 Sensitivity 和 Specificity 對(duì)脂倦,因?yàn)檫@里我們的樣本點(diǎn)較少番宁,所以讓閾值根據(jù)樣本點(diǎn)來采樣即可,依然用橫線表示閾值赖阻,則所有閾值的采樣情況如下:
我們把這些閾值對(duì)應(yīng)的混淆矩陣都列出來:
然后蝶押,計(jì)算這些混淆矩陣對(duì)應(yīng)的 Sensitivity 和 1-Specificity:
Threshold | Sensitivity | 1- Specificity |
---|---|---|
1 | 0 | 0 |
0.99 | 0.2 | 0 |
0.97 | 0.4 | 0 |
0.94 | 0.4 | 0.2 |
0.90 | 0.6 | 0.2 |
0.71 | 0.8 | 0.2 |
0.09 | 0.8 | 0.4 |
0.043 | 1.0 | 0.4 |
0.0061 | 1.0 | 0.6 |
0.0003 | 1.0 | 0.8 |
0 | 1.0 | 1.0 |
根據(jù)該表格,以 1-Specificity 為橫軸火欧,Sensitivity 為縱軸作圖棋电,通常,在畫 ROC 曲線時(shí)苇侵,我們把 1-Specificity 對(duì)應(yīng)的坐標(biāo)軸記為 FPR (False Positive Rate)赶盔,把 Sensitivity 對(duì)應(yīng)的坐標(biāo)軸記為 TPR (True Positive Rate),如下:
ROC 曲線有以下特點(diǎn):
- 從 (0, 0) 點(diǎn)到 (1,1) 點(diǎn)的對(duì)角線上的每個(gè)點(diǎn)榆浓,意味著在患者中于未,預(yù)測患病成功的概率(TPR),與未患病者中陡鹃,預(yù)測未患病失敗的概率(FPR)相等烘浦,對(duì)于模型來說,TPR 越大越好萍鲸,F(xiàn)PR 越小越好闷叉,所以我們需要盡可能的使 ROC 曲線沿左上角方向遠(yuǎn)離該對(duì)角線。
- ROC 曲線還可以幫助我們選擇合適的閾值脊阴,即 TPR 相同的情況下握侧,ROC 上的點(diǎn)越靠左蚯瞧,效果越好,因?yàn)樵娇孔笈河剑馕吨?FPR 越小状知。
根據(jù) ROC 曲線的第 1 個(gè)特點(diǎn):「曲線越靠近左上角,模型的效果越好」孽查,意味著一個(gè)更好模型饥悴,其曲線下方的面積更大,我們把 ROC 曲線下方的面積稱為 AUC (Area Under Curve)盲再,有了這個(gè)概念后西设,只需一個(gè)數(shù)值就可以衡量模型的好壞了,上面示例模型的 AUC 如下:
通常情況下我們都使用 AUC 來評(píng)估模型答朋,既然是”通炒浚”,那肯定就有例外:當(dāng)患病率 (或正樣本占比) 非常小時(shí)梦碗,Ture Negative 就會(huì)非常大禽绪,這個(gè)值就會(huì)使影響 FPR,使 FPR 較小洪规,為了避免這種影響印屁,我們可以將 FPR 用另一個(gè)指標(biāo)代替:Precision
Precision 的含義是預(yù)測患病的樣本中,實(shí)際也患病的比例斩例;這樣雄人,將 Precision 和 Sensitivity 結(jié)合起來,會(huì)讓我們更專注于患病 (正樣本) 的預(yù)測效果念赶,而機(jī)器學(xué)習(xí)中的另一個(gè)效果指標(biāo):F1 Score础钠,就是專門負(fù)責(zé)這件事兒的
上面的公式中,Recall 等價(jià)于 Sensitivity叉谜,和 AUC 一樣旗吁,兩個(gè)模型互相比較,F(xiàn)1 Score 越大者正罢,預(yù)測效果越好阵漏,而且 F1 Score 能更好的衡量正樣本的預(yù)測效果。
總結(jié)
本文通過一個(gè)醫(yī)學(xué)例子——是否患心臟病——來講述什么是混淆矩陣翻具、ROC 曲線履怯、AUC 及 F1 Score,其中裆泳,我們還一起學(xué)習(xí)了 ROC 曲線是如何畫出來的叹洲,最后,我們還談到了 AUC 和 F1 Score 以及它們之間細(xì)微的差別工禾。
需要注意的是运提,二分類評(píng)估并不限于對(duì)患病及未患病這兩種情況的分類蝗柔,考慮到通用性,你完全可以將本文中的患心臟病替換為正樣本民泵、把未患心臟病替換為負(fù)樣本癣丧。