R语言利用caret包比较ROC曲线的操作

 更新时间:2021年5月6日 13:51  点击:2490

说明

我们之前探讨了多种算法,每种算法都有优缺点,因而当我们针对具体问题去判断选择那种算法时,必须对不同的预测模型进行重做评估。

为了简化这个过程,我们使用caret包来生成并比较不同的模型与性能。

操作

加载对应的包与将训练控制算法设置为10折交叉验证,重复次数为3:

library(ROCR)
library(e1071)
library("pROC")
library(caret)
library("pROC")
control = trainControl(method = "repaetedcv",
   number = 10,
   repeats =3,
   classProbs = TRUE,
   summaryFunction = twoClassSummary)

使用glm在训练数据集上训练一个分类器

glm.model = train(churn ~ .,
   data= trainset,
   method = "glm",
   metric = "ROC",
   trControl = control)

使用svm在训练数据集上训练一个分类器

svm.model = train(churn ~ .,
   data= trainset,
   method = "svmRadial",
   metric = "ROC",
   trControl = control)

使用rpart函数查看rpart在训练数据集上的运行情况

rpart.model = train(churn ~ .,
   data = trainset,
   method = "svmRadial",
   metric = "ROC",
   trControl = control)

使用不同的已经训练好的数据分类预测:

glm.probs = predict(glm.model,testset[,!names(testset) %in% c("churn")],type = "prob")
svm.probs = predict(svm.model,testset[,!names(testset) %in% c("churn")],type = "prob")
rpart.probs = predict(rpart.model,testset[,!names(testset) %in% c("churn")],type = "prob")

生成每个模型的ROC曲线,将它们绘制在一个图中:

glm.ROC = roc(response = testset[,c("churn")],
  predictor = glm.probs$yes,
  levels = levels(testset[,c("churn")]))
plot(glm.ROC,type = "S",col = "red")
svm.ROC = roc(response = testset[,c("churn")],
  predictor = svm.probs$yes,
  levels = levels(testset[,c("churn")]))
plot(svm.ROC,add = TRUE,col = "green")
rpart.ROC = roc(response = testset[,c("churn")],
  predictor = rpart.probs$yes,
  levels = levels(testset[,c("churn")]))
plot(rpart.ROC,add = TRUE,col = "blue")

三种分类器的ROC曲线

说明

将不同的分类模型的ROC曲线绘制在同一个图中进行比较,设置训练过程的控制参数为重复三次的10折交叉验证,模型性能的评估参数为twoClassSummary,然后在使用glm,svm,rpart,三种不同的方法建立分类模型。

从图中可以看出,svm对训练集的预测结果(未调优)是三种分类算法里最好的。

补充:R语言利用caret包比较模型性能差异

说明

我们可以通过重采样的方法得对每一个匹配模型的统计信息,包括ROC曲线,灵敏度与特异度,然后基于这些统计信息来比较不同模型的性能差异。

操作

利用上节的信息,准备好glm分类模型,svm分类模型,rpart分类模型,并存放在glm.model,svm.model,rpart.model。

cv.values = resamples(list(glm = glm.model,svm =svm.model,rpart = rpart.model))
> summary(cv.values)
Call:
summary.resamples(object = cv.values)
Models: glm, svm, rpart 
Number of resamples: 30 
ROC 
  Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
glm 0.7597790 0.7927740 0.8040455 0.8106454 0.8347961 0.8760824 0
svm 0.8191998 0.8786439 0.8945208 0.8947360 0.9196775 0.9562556 0
rpart 0.6064540 0.7150320 0.7608241 0.7556544 0.8086731 0.8554750 0
Sens 
  Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
glm 0.08823529 0.1764706 0.2058824 0.2124930 0.2516807 0.3235294 0
svm 0.44117647 0.5294118 0.5882353 0.5956863 0.6470588 0.7941176 0
rpart 0.20000000 0.4117647 0.4705882 0.4787955 0.5514706 0.7352941 0
Spec 
  Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
glm 0.9393939 0.9645119 0.9721581 0.9702721 0.9796954 0.9898477 0
svm 0.9494949 0.9695431 0.9771574 0.9755004 0.9847716 0.9898990 0
rpart 0.9492386 0.9746193 0.9796954 0.9780359 0.9848485 1.0000000 0

使用dotplot函数绘制重采样在ROC曲线度量中的结果:

dotplot(cv.values,metric = "ROC")

使用箱线图绘制重采样结果:

bwplot(cv.values,layout=c(3,1))

重采样结果箱线图

说明

我们使用resample函数生成各个模型的统计信息,再调用summary函数输出三个模型在ROC、灵敏度及特异性上的统计信息。

使用dotplot方法处理重采样结果来观测不同模型ROC差异,最后,采用箱线图在同一张图上对ROC、灵敏度及特异方面的差别进行比较。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。如有错误或未考虑完全的地方,望不吝赐教。

[!--infotagslink--]

相关文章

  • R语言作图:坐标轴的设置方式

    这篇文章主要介绍了R语言作图:坐标轴的设置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • R语言 如何删除指定变量或对象

    这篇文章主要介绍了R语言删除指定变量或对象的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • R语言基本画图函数与多图多线的用法

    这篇文章主要介绍了R语言基本画图函数与多图多线的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • R语言-如何将list转换为向量

    这篇文章主要介绍了R语言-将list转换为向量的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • R语言-如何切换科学计数法和更换小数点位数

    这篇文章主要介绍了R语言-切换科学计数法和更换小数点位数的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • R语言创建矩阵的实现方法

    这篇文章主要介绍了R语言创建矩阵的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-06
  • R语言运算符知识点讲解

    在本篇文章里小编给大家分享了一篇关于R语言运算符知识点讲解内容,有兴趣的朋友们可以参考下。...2021-05-06
  • R语言中的因子类型详解

    这篇文章主要介绍了R语言中的因子类型详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • R语言-使用快捷键快速注释的实现

    这篇文章主要介绍了R语言-使用快捷键快速注释的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • R语言中quantile()函数的用法说明

    这篇文章主要介绍了R语言中quantile()函数的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • 如何改变R语言默认存储包的路径

    这篇文章主要介绍了改变R语言默认存储包的路径操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • R语言导入导出数据的几种方法汇总

    这篇文章主要给大家总结介绍了R语言导入导出数据的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-06
  • R语言 install.packages 无法读取索引的解决方案

    这篇文章主要介绍了R语言 install.packages 无法读取索引的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • R语言关于“包”的知识点总结

    在本篇文章里小编给大家分享的是一篇关于R语言“包”的知识点总结内容,有兴趣的朋友们可以学习下。...2021-05-06
  • R语言逻辑回归、ROC曲线与十折交叉验证详解

    这篇文章主要给大家介绍了关于R语言逻辑回归、ROC曲线与十折交叉验证的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-06
  • R语言学习ggplot2绘制统计图形包全面详解

    这篇文章主要为大家详细介绍了R语言学习ggplot2绘制统计图形包的全面知识讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助...2021-11-06
  • R语言关于随机森林算法的知识点详解

    在本篇文章里小编给大家整理的是一篇关于R语言关于随机森林算法的知识点详解内容,有兴趣的朋友们可以跟着学习下。...2021-05-13
  • R语言-t分布正态分布分位数图的实例

    这篇文章主要介绍了R语言-t分布正态分布分位数图的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • R语言-在一张图上显示多条线的实现

    这篇文章主要介绍了R语言-在一张图上显示多条线的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • R语言开发之CSV文件的读写操作实现

    这篇文章主要介绍了R语言开发之CSV文件的读写操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-06