机器学习模型绘制校正曲线(Calibration Curve)
Hi,大家好,我是晨曦
今天这期推文的主题依旧来自于群里小伙伴的提问QAQ
A同学:晨曦,我现在已经会机器学习绘制ROC和DCA了,但是Calibration curve我还是不会,而且我探索了好久都还是不会,能不能出个教程,让我把区分度、校准度、临床决策曲线一网打尽
晨曦:.....
那么,既然小伙伴们有了需求,晨曦自当是开启自己的“浪学”技能,所以本期推文的主题应运而生,让我们来看一下机器学习模型Calibration curve的绘制
晨曦经常说:可视化的本质其实就是数据,我们在绘制某种可视化结果的时候,一定要问自己它的数据类型是什么?它是通过哪些数据绘制而成的
Calibration curve,直译过来就是校准曲线或校准图。其实,校准曲线就是实际发生率和预测发生率的散点图。实质上,校准图曲线是Hosmer-Lemeshow拟合优度检验的结果可视化。目前校准曲线常用来评价logistic回归和cox回归模型
但是如果我们可以获得输入数据,那么其实也是可以扩展到其它类型的模型上的
也就是说一旦我们知道了绘制某种可视化的数据类型,那么我们自然就可以去尝试绘制出相似的可视化结果,那么我们接下来通过一个案例来看一下,绘制Calibration curve需要的数据类型
#背景知识
#目前来说绘制Calibration curve的流程为:(校准曲线就是实际发生率和预测发生率的散点图)
##1.对预测进行分桶
##2.求出每个桶里面所有样本预测概率的平均值,作为横坐标
##3.求出每个桶里面阳性结局的概率,作为纵坐标。
##4.将这些点连起来,就成为了校准曲线
重点看一下上面这个背景知识哦,很重要
#准备工作
library(tidyverse)
library(ggplot2)
library(mlr3)
library(mlr3learners)
library(randomForest)#执行随机森林算法
library(varSelRF)#挑选变量
library(rms)
工欲善其事必先利其器~
#获取输入数据
data("iris")
df
df
#重点需要注意,校准曲线只适用于二分类任务,也就是有监督学习中分类的算法
df %
filter(!Species == "virginica")
df$Species
index
traindata
testdata
这里我们需要注意,我们绘制校准曲线的目的其实就是衡量我们的模型预测的准确程度,只不过是从另一方面来进行评价,模型表现越好,按照逻辑来说越贴近中间对角线,说明我们的模型校准度越好
#构建随机森林模型
iris_rf
ntree=400,important=TRUE,proximity=TRUE)
#获取预测结果,注意我们这里获取的时候预测概率而不是label
iris_pred
p
p_positive
#我们这里提取预测阳性结局的概率
#这里我们需要注意一个细节,基本上绘制DCA或者是校准曲线基本上都是阳性结局概率和其它相关的因素去绘制
#我们这里的数据我们就随便选择一个分类作为阳性结局
sor
p_positive
#响应变量也要按照这个排序
y
这里我们需要注意一下,按照网络上其它的观点并没有发现需要排序的目的,但是按照我们的数学知识告诉我们,数据就是这些,你排序了顺序可能会改变点的位置,但是对整体的结果应该是没有特别明显的影响,所以这里我们是根据顺序进行了排序,当然各位小伙伴也可以尝试不排序然后进行绘制
那么这里我们就可以复习一下校准曲线的目的了
观察分类模型的预测阳性结局概率是否接近于实际阳性结局概率
#这里我们还得小小的对响应变量进行重编码
y
#把p_positive分为10个等分区间
groep
#获得预测阳性结局概率和实际阳性结局概率
meanpred
meanobs
#整理数据
finall
meanobs = meanobs)
#可视化
ggplot(finall,aes(x = meanpred,y = meanobs))+
geom_point()+
geom_line(linetype = 2)+
geom_abline(slope = 1,intercept = 0,lty="solid",color = "red")+
labs(x="预测阳性结局概率",y = "实际阳性结局概率",title = "calibration_curve")+
theme_classic()
#这里因为我们的数据很少,所以分箱后的点就会很少
然后还是那句话,既然我们已经得到了可视化的输入数据了,完全就可以按照网络上ggplot2的教程,把这个可视化做的更完美一些,因为我们会发现校准曲线本质上就是散点图+对角线仅此而已
那么,本期推文到这里就结束啦~
欢迎各位小伙伴在评论区提出自己感兴趣的内容哦,晨曦会根据自己的实际能力写出相关的心得哦~
我是晨曦,我们下期再见!
参考教程:
1.讲解Calibration curve:calibration_curve(校准曲线): 分类模型可视化技术之一 - 知乎 (zhihu.com)2.校正曲线基于python和影像组学:医学影像深度学习系列(五)- 校准曲线(calibration)以及普拉特缩放platt scaling - 知乎 (zhihu.com)3.ggplot2参考线绘制:R 数据可视化 —— ggplot 线图 - 知乎 (zhihu.com)4.ggplo2添加辅助线:跟着Nature学作图:R语言ggplot2散点图和添加辅助线完整示例 - 知乎 (zhihu.com)5.自定义绘制校准曲线教程:(28条消息) 手动绘制logistic回归预测模型校准曲线(Calibration curve)(1)
天桥下的卖艺者的博客-CSDN博客python 校准曲线
欢迎大家关注解螺旋生信频道-挑圈联靠公号~