如何用R语言画ROC曲线图

Python013

如何用R语言画ROC曲线图,第1张

R语言如何做ROC曲线

ROC曲线,做分类时经常会用到的一种结果表现方法。诸如此类的工作,首选工具当然是R。在CRAN上搜了一下,找到一个叫ROCR的包。尽管这个包已经很久没更新了,但用起来还是很爽的。先看一下我画的ROC曲线。

里面是三份预测结果的ROC曲线。

ROCR包中主要是两个class:prediction和performance。前者是将预测结果和真实标签组合在一起,生成一个 prediction对象,然后在用performance函数,按照给定的评价方法,生成一个performance对象,最后直接对 performance用plot函数就能绘制出相应的ROC曲线。

1

2

3

4

5

6

plot a ROC curve for a single prediction run

and color the curve according to cutoff.

data(ROCR.simple)

pred lt- prediction(ROCR.simple$predictions, ROCR.simple$labels)

perf lt- performance(pred,tpr,fpr)

plot(perf,color

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

我们之前探讨了多种算法,每种算法都有优缺点,因而当我们针对具体问题去判断选择那种算法时,必须对不同的预测模型进行重做评估。为了简化这个过程,我们使用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对训练集的预测结果(未调优)是三种分类算法里最好的。

roc曲线的正确解读为:

(一)ROC 曲线的概念

受试者工作特征曲线 ( receiver operator characteristic curve, ROC 曲线),最初用于评价雷达性能,又称为接收者操作特性曲线。

ROC 曲线是根据一系列不同的二分类方式(分界值或决定尔),以真阳性率 (灵敏度)为以坐标,假阳性率(1-特异度)为横坐标绘制的曲线。传统的诊断试验汗价方法有一个其同的特点,必须将武验结果分为两类 ,再进行统计分析。

ROC 曲线的评价方法与传统的评价方法不同,无须此限制,而是根据实际情况许有中间状态,可以把武验结果划分为多个有序分类,如正常、大致正常、可疑、大致常和升常五个等级再进行统计分析。因此,ROC 曲线评价方法适用的范国更为广泛。

(二)ROC 曲线的主要作用

1ROC 曲线能很容易地查出任意界限值时的对疾病的识别能力。

2选择最佳的诊断界限值。ROC 曲线越章近左上角,试验的准确性就越高。最靠近左上角的ROC 曲线的点是错误最少的最好国值,其假阳性和假阴性的总数最小。

3.两种或两种以上不同诊断试验对疾病识别能力的比较。在对同一种疾病的两种或两种以上诊断方法进行比较时 ,可将各过验的 ROC 曲线绘制到同一坐标中,以直观地鉴别优劣,靠近左上角的ROC 曲线所代表的受试者工作最准确。亦可通过分别计算各个试验的ROC 曲线下的面积(AUC)进行比较,哪一种试验的AUC 最大,则哪一种试验的诊断价值