乐趣区

关于数据挖掘:视频分类模型评估精确率召回率ROC曲线AUC与R语言生存分析时间依赖性ROC实现附代码数据

全文链接:http://tecdat.cn/?p=20650 

原文出处:拓端数据部落公众号

 

视频 | 分类模型评估: 准确率、召回率、ROC 曲线、AUC 与 R 语言生存剖析工夫依赖性 ROC 实现

分类模型评估准确率、召回率、ROC 曲线、AUC 与 R 语言生存剖析工夫依赖性 ROC 实现

本文将帮忙您答复以下问题:

  1. ROC 曲线是什么?
  2. 曲线下的面积是多少?
  3. 二元分类的决策阈值是多少?
  4. 分类模型可承受的 AUC 值是多少?
  5. 什么是准确召回曲线?
  6. 什么时候应该应用准确召回和 ROC 曲线?

什么是 ROC 曲线?

如果你用搜寻 ROC 曲线,你会失去以下答案:

接受者操作特色曲线 或 ROC 曲线是一个图形,它阐明了二元分类器零碎在其辨别阈值变动时的诊断能力。”**

这个定义不容易了解,对初学者来说可能听起来很吓人。

本文旨在帮忙您以一种简略的语言了解 ROC 曲线,以便您能够在 ROC 曲线背地建设一些根本思维。

在咱们进入 ROC 曲线之前,咱们须要记住混同矩阵是什么。

混同矩阵

混同矩阵帮忙咱们可视化模型在辨别两个类别时是否“谬误”。它是一个 2×2 矩阵。行名是测试集中的理论值,列名是模型预测的。

PositiveNegative 是 ML 模型预测标签的名称。每当预测谬误时,第一个词是False,当预测正确时,第一个词是True

ROC 曲线基于从混同矩阵得出的两个指标:真正例率 (TPR ) 和假正例率 (FPR )。TPR与召回率雷同。它是正确预测的正样本除以数据集中可用的所有理论正样本的比率。

TPR 侧重于理论的正类:

真正例率公式

反过来,FPR 是假正例预测与真负样本总数的比率。

FPR 公式

ROC 曲线是基于 TPR 和 FPR 绘制的。

ROC 曲线示例

通过应用 TPR 和 FPR,ROC 曲线显示了您的分类模型在所有分类阈值下的性能。

然而分类决策阈值是多少?

首先,你的分类 ML 模型输入是一个概率。例如,您构建一个分类器来依据给定人的体重预测性别(女性或男性)。假如正类是女性(1),负类是男性(0)。而后,您将 150 公斤的分量样本传递给您的 ML 模型,该模型预测的概率为 0.23。

默认状况下,您的分类阈值为 0.5。任何高于 0.5 的概率将被归类为 1 类(正),低于 0.5 的概率将被归为 0 类(负)。给定 0.23 的概率,体重 150 公斤的人将被归类为负类(男性)。

简而言之,您应用此阈值作为截止值,将预测后果分类为正类或负类。这是一个后处理步骤,将预测概率作为二进制类别返回。通过更改阈值,您的 TP、TN、FP 和 FN 将发生变化,因而您能够依据要改良的指标对其进行优化。

因而,ROC 反过来会告诉您您的 ML 模型可能在多大程度上辨别不同阈值的两个类别。

您应用称为 AUC 曲线下面积 来测量 ROC。您应用 AUC 来评估算法的品质,以便在两个类别之间进行检测。

A rea U under the Curve: AUC 

让咱们通过图形示例来回顾 ROC。

假如咱们正在建设一个模型来预测:申请人是偿还贷款还是坏帐。

在下图中,蓝线是正类预测概率的散布,示意申请者拒付(未能偿还),红线是负类预测概率分布,示意申请者将偿还。

在以下状况下,AUC 为 0.70。这意味着该模型可能正确区分正类和负类之间的 70%。

AUC=0.7

显然,咱们离现实的状况还很远。曲线将重叠,这意味着咱们的 ML 模型会犯错误,咱们将其视为误报。

现实分类器示例

上述案例阐明了当咱们的 ML 模型正确预测两个类时的现实状况。散布之间没有重叠。该模型能够完满辨别正类和负类,是一个现实的分类器。

可能存在 AUC 为 0.5 的状况。这意味着咱们的 ML 模型无奈辨别正类和负类。它实际上是一个随机分类器。

AUC = 0.5

有时 AUC 为 0。这意味着模型反向预测类别。该模型认为负类是正类,反之亦然。

AUC = 0

总而言之,正当的 AUC 超过 0.5(随机分类器),而好的分类模型的 AUC > 0.9。然而,这个值高度依赖于它的利用。

R 语言中生存分析模型与工夫依赖性 ROC 曲线可视化

视频:R 语言生存剖析原理与早期肺癌患者剖析案例

R 语言生存剖析 Survival analysis 原理与早期肺癌患者剖析案例

人们通常应用接收者操作特色曲线(ROC)进行二元后果逻辑回归。然而,流行病学钻研中感兴趣的后果通常是事件产生工夫。应用随工夫变动的工夫依赖性 ROC 能够更全面地形容这种状况下的预测模型。

工夫依赖性 ROC 定义

令 Mi 为用于死亡率预测的基线(工夫 0)标量标记。当随时间推移察看到后果时,其预测性能取决于评估工夫 t。直观地说,在零工夫测量的标记值应该变得不那么相干。因而,ROC 测得的预测性能(辨别)是工夫 t 的函数。

累积病例

累积病例 / 动静 ROC 定义了在工夫 t 处的阈值c 处的 灵敏度和特异性,如下所示。

累积灵敏度将在工夫 t 之前死亡的视为分母(疾病),而将标记值高于 c 的作为实在阳性(疾病阳性)。动静特异性将在工夫 t 依然活着作为分母(衰弱),并将标记值小于或等于 c 的那些作为实在阴性(衰弱中的阴性)。将阈值 c 从最小值更改为最大值会在工夫 t 处显示整个 ROC 曲线。

新发病例

新发病例 ROC1 在工夫 t 处以阈值 c 定义灵敏度和特异性,如下所示。

累积灵敏度将在工夫 t 处 死亡的人  视为分母(疾病),而将标记值高于 Ç 的人视为实在阳性(疾病阳性)。

数据筹备

咱们以 数据  包中的 dataset3survival 为例。事件产生的工夫就是死亡的工夫。Kaplan-Meier 图如下。



## 变成 data_frame
data <- as_data_frame(data)
## 绘图
plot(survfit(Surv(futime, fustat) ~ 1,
                   data = data)

可视化后果:

在数据集中超过 720 天没有产生任何事件。


## 拟合 cox 模型
coxph(formula = Surv(futime, fustat) ~ pspline(age, df = 4) + 
## 取得线性预测值
 predict(coxph1, type = "lp")

累积病例

实现了累积病例


## 定义一个辅助函数,以在不同的工夫进行评估
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 稳固在 0.856。这种体现并没有消退,因为高风险分数的人死了。

新发病例

实现新发病例


## 定义一个辅助函数,以在不同的工夫进行评估
 
## 每 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) +
 

可视化后果:

这种差别在前期更为显著。最值得注意的是,只有在每个工夫点处于危险集中的个体能力提供数据。所以数据点少了。体现的消退更为显著,兴许是因为在那些存活工夫足够长的人中,工夫零点的危险分没有那么重要。一旦没有事件,ROC 基本上就会趋于平缓。

论断

总之,咱们钻研了工夫依赖的 ROC 及其 R 实现。累积病例 ROC 可能与 危险(累积发生率)预测模型的概念更兼容。新发病例 ROC 可用于查看工夫零标记在预测后续事件时的相关性。

参考

  1. 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 剖析芯片数据

5.R 语言生存剖析数据分析可视化案例

6.r 语言 ggplot2 误差棒图疾速指南

7.R 语言绘制性能富集泡泡图

8.R 语言如何找到患者数据中具备差别的指标?(PLS—DA 剖析)

9.R 语言中的生存剖析 Survival analysis 早期肺癌患者 4 例

退出移动版