視頻|分類模型評估:精確率、召回率、ROC曲線、AUC與R語言生存分析時間依賴性ROC實現(xiàn)|
全文鏈接:http://tecdat.cn/?p=20650?
原文出處:拓端數(shù)據(jù)部落公眾號
?
視頻|分類模型評估:精確率、召回率、ROC曲線、AUC與R語言生存分析時間依賴性ROC實現(xiàn)
分類模型評估精確率、召回率、ROC曲線、AUC與R語言生存分析時間依賴性ROC實現(xiàn)
本文將幫助您回答以下問題:
ROC曲線是什么?
曲線下的面積是多少?
二元分類的決策閾值是多少?
分類模型可接受的 AUC值是多少?
什么是精確召回曲線?
什么時候應該使用精確召回和 ROC 曲線?
什么是ROC曲線?
如果你用搜索 ROC 曲線,你會得到以下答案:
*“?*接受者操作特征曲線或 ROC 曲線是一個圖形,它說明了二元分類器系統(tǒng)在其區(qū)分閾值變化時的診斷能力。”
這個定義不容易理解,對初學者來說可能聽起來很嚇人。
本文旨在幫助您以一種簡單的語言理解 ROC 曲線,以便您可以在 ROC 曲線背后建立一些基本思想。
在我們進入 ROC 曲線之前,我們需要記住混淆矩陣是什么。
混淆矩陣
混淆矩陣幫助我們可視化模型在區(qū)分兩個類別時是否“錯誤”。它是一個 2x2 矩陣。行名是測試集中的實際值,列名是模型預測的。
Positive或Negative是 ML 模型預測標簽的名稱。每當預測錯誤時,第一個詞是False,當預測正確時,第一個詞是True。
ROC曲線基于從混淆矩陣得出的兩個指標:真正例率 (?TPR?) 和假正例率 (?FPR?)。TPR與召回率相同。它是正確預測的正樣本除以數(shù)據(jù)集中可用的所有實際正樣本的比率。
TPR 側重于實際的正類:
真正例率公式
反過來,F(xiàn)PR 是假正例預測與真負樣本總數(shù)的比率。
FPR公式
ROC 曲線是基于 TPR 和 FPR 繪制的。
ROC曲線示例
通過使用 TPR 和 FPR,ROC 曲線顯示了您的分類模型在所有分類閾值下的性能。
但是分類決策閾值是多少?
首先,你的分類 ML 模型輸出是一個概率。例如,您構建一個分類器來根據(jù)給定人的體重預測性別(女性或男性)。假設正類是女性(1),負類是男性(0)。然后,您將 150 公斤的重量樣本傳遞給您的 ML 模型,該模型預測的概率為 0.23。
默認情況下,您的分類閾值為 0.5。任何高于 0.5 的概率將被歸類為 1 類(正),低于 0.5 的概率將被歸為 0 類(負)。給定 0.23 的概率,體重 150 公斤的人將被歸類為負類(男性)。
簡而言之,您使用此閾值作為截止值,將預測結果分類為正類或負類。這是一個后處理步驟,將預測概率作為二進制類別返回。通過更改閾值,您的 TP、TN、FP 和 FN 將發(fā)生變化,因此您可以根據(jù)要改進的指標對其進行優(yōu)化。
因此,ROC 反過來會告訴您您的 ML 模型能夠在多大程度上區(qū)分不同閾值的兩個類別。
您使用稱為AUC曲線下面積來測量 ROC。您使用 AUC 來評估算法的質量,以便在兩個類別之間進行檢測。
A?rea?U?under?the?Curve:?AUC?
讓我們通過圖形示例來回顧 ROC。
假設我們正在建立一個模型來預測:申請人是償還貸款還是壞帳。
在下圖中,藍線是正類預測概率的分布,表示申請者拒付(未能償還),紅線是負類預測概率分布,表示申請者將償還。
在以下情況下,AUC 為 0.70。這意味著該模型能夠正確區(qū)分正類和負類之間的 70%。
AUC=0.7
顯然,我們離理想的情況還很遠。曲線將重疊,這意味著我們的 ML 模型會犯錯誤,我們將其視為誤報。
理想分類器示例
上述案例說明了當我們的 ML 模型正確預測兩個類時的理想情況。分布之間沒有重疊。該模型可以完美區(qū)分正類和負類,是一個理想的分類器。
可能存在 AUC 為 0.5 的情況。這意味著我們的 ML 模型無法區(qū)分正類和負類。它實際上是一個隨機分類器。
AUC = 0.5
有時 AUC 為 0。這意味著模型反向預測類別。該模型認為負類是正類,反之亦然。
AUC = 0
總而言之,合理的 AUC 超過 0.5(隨機分類器),而好的分類模型的 AUC > 0.9。然而,這個值高度依賴于它的應用。
R語言中生存分析模型與時間依賴性ROC曲線可視化
視頻:R語言生存分析原理與晚期肺癌患者分析案例
R語言生存分析Survival analysis原理與晚期肺癌患者分析案例
人們通常使用接收者操作特征曲線(ROC)進行二元結果邏輯回歸。但是,流行病學研究中感興趣的結果通常是事件發(fā)生時間。使用隨時間變化的時間依賴性ROC可以更全面地描述這種情況下的預測模型。
時間依賴性ROC定義
令 Mi為用于死亡率預測的基線(時間0)標量標記。?當隨時間推移觀察到結果時,其預測性能取決于評估時間?t。直觀地說,在零時間測量的標記值應該變得不那么相關。因此,ROC測得的預測性能(區(qū)分)是時間t的函數(shù)?。?
累積病例
累積病例/動態(tài)ROC定義了在時間t?處的閾值c處的?靈敏度和特異性,??如下所示。
累積靈敏度將在時間t之前死亡的視為分母(疾病),而將標記值高于?c?的作為真實陽性(疾病陽性)。動態(tài)特異性將在時間t仍然活著作為分母(健康),并將標記值小于或等于?c?的那些作為真實陰性(健康中的陰性)。將閾值?c?從最小值更改為最大值會在時間t處顯示整個ROC曲線?。
新發(fā)病例
新發(fā)病例ROC1在時間t?處以閾值?c定義靈敏度和特異性,??如下所示。
累積靈敏度將在時間t處死亡的人??視為分母(疾?。?,而將標記值高于???的人視為真實陽性(疾病陽性)。
數(shù)據(jù)準備
我們以數(shù)據(jù)?包中的dataset3survival
為例。事件發(fā)生的時間就是死亡的時間。Kaplan-Meier圖如下。
## 變成data_framedata <- as_data_frame(data)## 繪圖plot(survfit(Surv(futime, fustat) ~ 1, ? ? ? ? ? ? ? ? ? data = data)
可視化結果:
在數(shù)據(jù)集中超過720天沒有發(fā)生任何事件。
## 擬合cox模型coxph(formula = Surv(futime, fustat) ~ pspline(age, df = 4) + ##獲得線性預測值 predict(coxph1, type = "lp")
累積病例
實現(xiàn)了累積病例
## 定義一個輔助函數(shù),以在不同的時間進行評估ROC_hlp <- function(t) { ? ?survivalROC(Stime ? ? ? ? ? ? ? ? ? ? ? ?status ? ? ? ? ? ? ? ? ? ? ? ?marker ? ? ? ? ? ? ? ? ? ? ? ?predict.time = t, ? ? ? ? ? ? ? ?method ? ? ? = "NNE", ? ? ? ? ? ? ? ?span = 0.25 * nrow(ovarian)^(-0.20))}## 每180天評估一次ROC_data <- data_frame(t = 180 * c(1,2,3,4,5,6)) %>% ? ?mutate(survivalROC = map(t, survivalROC_helper), ? ? ? ? ? ## 提取AUC ? ? ? ? ? auc = map_dbl(survivalROC, magrittr::extract2, "AUC"), ? ? ? ? ? ## 在data_frame中放相關的值 ? ? ? ? ? df_survivalROC = map(survivalROC, function(obj) { ? ? ? ? ? ## 繪圖 ggplot(mapping = aes(x = FP, y = TP)) + ? ?geom_point() + ? ?geom_line() + ? ? ?facet_wrap( ~ t) +
可視化結果:
180天的ROC看起來是最好的。因為到此刻為止幾乎沒有事件。在最后觀察到的事件(t≥720)之后,AUC穩(wěn)定在0.856。這種表現(xiàn)并沒有衰退,因為高風險分數(shù)的人死了。
新發(fā)病例
實現(xiàn)新發(fā)病例
## 定義一個輔助函數(shù),以在不同的時間進行評估 ## 每180天評估一次 ? ? ? ? ? ?## 提取AUC ? ? ? ? ? auc = map_dbl(risksetROC, magrittr::extract2, "AUC"), ? ? ? ? ? ## 在data_frame中放相關的值 ? ? ? ? ? df_risksetROC = map(risksetROC, function(obj) { ? ? ? ? ? ? ? ## 標記欄 ? ? ? ? ? ? ? marker <- c(-Inf, obj[["marker"]], Inf) ## 繪圖 ? ?ggplot(mapping = aes(x = FP, y = TP)) + ? ?geom_point() + ? ?geom_line() + ? ?geom_label(data = risksetROC_data %>% dplyr::select(t,auc) %>% unique, ? ?facet_wrap( ~ t) +
可視化結果:
這種差異在后期更為明顯。最值得注意的是,只有在每個時間點處于風險集中的個體才能提供數(shù)據(jù)。所以數(shù)據(jù)點少了。表現(xiàn)的衰退更為明顯,也許是因為在那些存活時間足夠長的人中,時間零點的風險分沒有那么重要。一旦沒有事件,ROC基本上就會趨于平緩。
結論
總之,我們研究了時間依賴的ROC及其R實現(xiàn)。累積病例ROC可能與風險?(累積發(fā)生率)預測模型的概念更兼容?。新發(fā)病例ROC可用于檢查時間零標記在預測后續(xù)事件時的相關性。
參考
Heagerty,Patrick J. and Zheng,Yingye,??Survival Model Predictive Accuracy and ROC Curves,Biometrics,61(1),92-105(2005).?doi:10.1111 / j.0006-341X.2005.030814.x.
最受歡迎的見解
1.R語言繪制生存曲線估計|生存分析|如何R作生存曲線圖
2.R語言生存分析可視化分析
3.R語言如何在生存分析與Cox回歸中計算IDI,NRI指標
4.r語言中使用Bioconductor 分析芯片數(shù)據(jù)
5.R語言生存分析數(shù)據(jù)分析可視化案例
6.r語言ggplot2誤差棒圖快速指南
7.R 語言繪制功能富集泡泡圖
8.R語言如何找到患者數(shù)據(jù)中具有差異的指標?(PLS—DA分析)
9.R語言中的生存分析Survival analysis晚期肺癌患者4例