# 模型评估 | R语言实现ROC

```library(dplyr)
library(ggplot2)
PlotROC_N <-function(Pred_Var, labels_Var, descending, N){
# Pred_Var is prob: descending=1
# Pred_Var is score: descending=0

df<- data.frame(Pred=Pred_Var, labels=labels_Var)

if (descending==1){
df1<-arrange(df, desc(Pred))
}else if (descending==0){
df1<-arrange(df, Pred)
}

len<- ceiling(dim(df1)[1]/N)
N_0<- table(df1\$labels)[1]
N_1<- table(df1\$labels)[2]

I<- c(0)
TPR<- c(0)
FPR<- c(0)
area<- c(0)

L<- nrow(df1)
if (N>L) N<- L
df1\$rowno<- 1:L
qus<- quantile(1:L, probs = seq(0,1, 1/N))

out<- mapply(
function(i){
sub<- df1[df1\$rowno<ifelse(i==N, qus[i+1]+0.001, qus[i+1]), ]
I<<- c(I, i)

TPR_temp<-sum(sub\$labels==1)/N_1
FPR_temp<-sum(sub\$labels==0)/N_0
area_temp<-0.5*(TPR_temp+TPR[length(TPR)])*(FPR_temp-FPR[length(FPR)])

TPR<<- c(TPR, TPR_temp)
FPR<<- c(FPR, FPR_temp)
area<<- c(area, area_temp)

}, 1:N)

df_roc<- data.frame(I=I, TPR=TPR, FPR=FPR, area=area)

#calculate the AUC: area under the curve
AUC<-round(sum(df_roc\$area), 4)

# Plot ROC-curve
PlotROC<- ggplot(
data = df_roc, aes(x= FPR, y = TPR)) +
geom_line(colour='steelblue4', size=1.2) +
geom_abline(intercept=0, slope =1, linetype=2, size=1, colour="gray40") +

scale_x_continuous(breaks=seq(0,1,.2))+
scale_y_continuous(breaks=seq(0,1,.2))+

annotate("text", x = 0.5, y = 1.05, label=paste("AUC=",AUC), size=4, alpha=0.8) +
labs(x="False positive rate", y ="True positive rate", title ="ROC-Curve") +

theme_bw()+
theme(
plot.title=element_text(colour="gray24",size=12,face="bold"),
plot.background = element_rect(fill = "gray90"),
axis.title=element_text(size=10),
axis.text=element_text(colour="gray35")
)

result<-list(AUC=AUC, PlotROC=PlotROC)
return(result)
}```

`result <- PlotROC_N(predict, y, 1, 10)`

AUC值：

```> result\$AUC
[1] 0.806```

ROC曲线：

`result\$PlotROC`

0 条评论

• ### 模型评估 | Python实现ROC

首先从混合矩阵说起，混合矩阵是真实类别与预测类别的交叉表，其中矩阵的行表示真实值，矩阵的列表示预测值，二分类问题的混合矩阵如下：

• ### 徒手撸算法 | 线性回归

其中，x1, x2, ..., xp是预测变量，x0恒为1；θ1, θ2, ..., θp是预测变量系数(权重或参数)，θ0是偏置项(截距)，令θ=(θ0, θ...

• ### Matplotlib | 创建图形(figure)对象

Matplotlib中有多种创建图形对象的方法，常用到的有三种，下面直接举例子说明。

• ### IV值和WOE值记录

1）用途：评价特征或变量的预测能力。类似的指标还有信息增益 、增益率和基尼系数等

• ### 第172天：面向对象基本知识点

2 .构造函数内部会创建一个新的对象，即f的实例

• ### 彻底填平Static坑(细节决定成败)

学习的过程就是填坑的过程，可不要偷懒想着跳过去，你现在跳过去，就相当于给自己挖了一个坑，你迟早会掉进去的，为了避免不掉坑，所以，努力填坑吧！

• ### 【答疑释惑】C语言里面栈和堆的区别

很多初学者朋友对C语言里面的堆和栈理解的不是太清楚，模模糊糊。他们到底有哪些区别呢？我认为主要从以下几根方面来了解他们的不同之处： 1，变量位置：栈和堆都是程...

• ### Java基础深入解析——类与对象

成员变量与局部变量的区别 1.成员变量定义在类中，整个类中都能够访问。   局部变量定义在局部代码块中，只能在局部代码块中访问。 2.成员变量存在于堆内存中，有...

• ### jieba（结巴）分词种词性简介

在做实际项目中，经常用到文本分析过程中的结巴分词功能，为了更好的得到结果，需要限定分词词性，接替可参见之间的博客： http://blog.csdn.net...

• ### 从技术人到管理者：阿里的职场4年，教会了他2件事！

他却说：“站在已经三十多的年龄关口，想想自己也太过尘埃，或许我需要一个适合我去主导的舞台，玩出自己想要的精彩。”