ROC曲線基本知識:
判斷分類器的工作效率需要使用召回率和准確率兩個變量。
召回率:Recall,又稱“查全率”,
准確率:Precision,又稱“精度”、“正確率”。
以判斷病人是否死亡的分類器為例,可以把分類情況用下表表示:
|
實際死亡 |
實際未死亡 |
分類為死亡 |
A |
B |
分類為未死亡 |
C |
D |
表5-2
A:正確分類,命中死亡
B:錯誤分類,判斷為死亡實際未死亡
C:錯誤分類,判斷為未亡實際死亡
D:正確分類,判斷未死亡,實際也未死亡
如果我們希望這個分類器對於死亡的判斷能力非常高,也就是追求判斷為死亡的命中率越高越好。更一般的說法,對於特定臨床結局的判斷能力越強越好,評價這個分類器能力的指標被稱為召回率,也被稱為“查全率”,即Recall = A/(A+C),召回率當然越大越好。
如果我們希望分類器對於死亡的預測能力更高,也就是分類為死亡的人死亡的概率最大。或者更一般的說法,對於特定臨床結局的預測能力越強越好,這是追求“准確率”,即Precise = A/(A+B),越大越好。
在上面那個表格當中,由於樣本總數一定,因此A+B和C+D的總數也是一定的,我們把改變分類規則,讓A+B逐漸增大叫做判斷標准放寬。將C+D數量增大叫做判斷標准收嚴。
很容易可以看出,召回率反映的是在實際死亡的樣本當中,分類為死亡的人所占的比例。如果我們把分類標准放寬,A+B變得很大,c會減小,甚至c=0直到“寧可錯殺一千,也不放過一個”,有點危險的人統統算成死亡的人,則很可能獲得較高的召回率。但是此時,准確率會逐漸降低。
准確率則是在判斷為死亡的樣本中,真實死亡的人所占的比例,如果我們把分類標准定得很嚴,僅把哪些生命體征極為微弱,傷情特別嚴重的人納入判斷為可能死亡的組,在這種情況下,准確率會變得很高,分類器判斷為死亡的人大多活不了,但是此時分類器的召回率就會小得不可接受。因此,要對分類器的工作效能進行判斷,需要同時考察准確率和召回率。兩者均高,則分類器更好。
在不改變分類器基本性能的情況下,僅僅改變納入參數的標准,就可以在同一數據集里面多次檢查統計率和召回率,最后獲得准確率(P)和召回率(R)之間的曲線。這條曲線上的每一個點和坐標(1,1)之間的距離可以用來判斷出分類器的性能,如果這條曲線當中某一個點通過了坐標(1,1)也就是准確率和召回率都達到100%,那么此時分類標准就被稱為“完美分類標准”
一般來說,如果分類器的目的是進行死亡篩查,找出那些有可能死亡的患者重點關注,那么此時應當重視召回率(查全率),這樣可以避免忽視那些有可能死亡的患者。而如果分類器的目的是為了做疾病診斷,那么則應該注意准確率,把太多的沒有病死風險的患者判斷為有風險則有可能影響用戶對分類器的信心。
如果同時對召回率和准確率都有所要求,可以用經驗測度值F來表示系統的工作效能。
F=2*P*R/(P+R)
F值越接近1,則系統的工作效能越高。
2.3.3ROC和AUC
回到ROC上來,ROC的全名叫做接收器工作特性曲線(Receiver Operating Characteristic)。
它由兩個指標構成:
(一)真陽性率True Positive Rate ( TPR ) = A / A+C ,TPR代表能將正例分對的概率,也就是上面提到的查全率。
(二)假陽性率False Positive Rate( FPR ) = B /(B+D) ,FPR代表將負例錯分為正例的概率。
在ROC 空間中,每個點的橫坐標是假陽性率,縱坐標是真陽性率,這也就描繪了分類器在真陽性率和假陽性率之間的一個連續的權衡過程。ROC的主要分析工具是一個畫在ROC空間的曲線——ROC curve。根據分類結果計算得到ROC空間中相應的點,連接這些點就形成ROC curve。ROC 曲線起點是(0,0),意味着某種異常嚴格的標准,使得沒有任何樣本被判斷為陽性。終點是(1,1)意味着某種異常寬松的標准,使得任何樣本不管真假,都被判斷為陽性。實際上(0, 0)和(1, 1)連線形成的ROC curve就是一個隨機分類器。一般情況下,這個曲線都應該處於(0, 0)和(1, 1)連線的上方。
用ROC curve來表示分類器性能很直觀好用。可是,人們總是希望能有一個數值來標志分類器的好壞。
於是Area Under roc Curve(AUC)就出現了。顧名思義,AUC的值就是處於ROC curve下方的那部分面積的大小。通常,AUC的值介於0.5到1.0之間,較大的AUC代表了較好的性能。如果AUC的值僅僅只有0.5,那么則意味着這個分類器的性能和隨機拋硬幣類似。
建立好上述預測分類器之后,需要評估它的預測工作效率,也就是對於給定的入院患者數據,我們建立起來的分類器在多大程度上能夠正確預測臨床結局。
對於分類器或者預測器進行功能評估由一個很重要的一個因素是要防止“過度分類”。沒有任何兩個病人的入院數據是完全相同的。如果在已知臨床結局的情況下去建立起一個區別病人生存和死亡的模型,如果納入足夠多的入院數據,很可能建立起一套非常“完美”的分類器,把已有的數據代入這個分類器可以准確的判斷是臨床結局。但是如果一旦有新數據進入這套分類器,那么判斷結果往往就有可能出錯。造成這種現象的原因是因為分類器構建出來的目的不是對已經發生的事情進行分類,而是對未發生的事情進行預測。納入過多的變量,通過“事后諸葛亮”似的過程來對樣本進行分類很有可能把一些在統計學上和樣本結局相關,但實際上只是巧合的變量計算入數據建模當中,從而使得分類器的判斷准確率變得很高。
有兩類方法可以防止過度分類,一類是將數據訓練集和測試集徹底分開,用新獲得的數據來進行區分模型的准確性檢驗。而另外一種方法則是在構建訓練集的時候進行交叉驗證。所謂交叉驗證就是,用所有數據的一部分用作訓練集。另外一小部分作為驗證集。計算出分類器准確度。然后把原來作為驗證集的數據納入訓練集,從訓練集當中新畫出一部分樣本作為驗證集。最后直到所有的樣本都有機會納入訓練集和驗證集當中。這樣的一個過程就稱為交叉驗證(cross validation),交叉驗證可以在樣本有限的情況下獲得盡可能穩定的分類結果。
ROC曲線在統計工具包當中是由perfcurve函數來決定的
典型的使用方法是:
[X,Y,T,AUC] = perfcurve(labels,scores,posclass)
輸出部分X和Y表示的是ROC曲線的坐標,AUC表示曲線下面積,T表示thresholds,當T=1的時候表示存在一個分類標准,可以100%的將所有樣本准確分類,特異度和敏感度都是100%。可以用plot(X,Y)來獲得最簡單的ROC曲線。
輸入部分labels表示樣本的真實分類,scores表示學習后的分類,posclass表示我們想要的研究對象的分類標記比如,當用於某個預測顱骨性別的模型進行ROC判斷的時候,預測男性和女性的ROC判別曲線是不一樣的,posclass可以設置為'male' or 'female'。