R语言︱ROC曲线——分类器的性能表现评价
笔者寄语:分类器算法最后都会有一个预测精度,而预测精度都会写一个混淆矩阵,所有的训练数据都会落入这个矩阵中,而对角线上的数字代表了预测正确的数目,即True Positive+True Nagetive。
——————————————————————————
相关内容:
——————————————————————————
1、TPR与TNR
同时可以相应算出TPR(真正率或称为灵敏度)和TNR(真负率或称为特异度)。我们主观上希望这两个指标越大越好,但可惜二者是一个此消彼涨的关系。除了分类器的训练参数,临界点的选择,也会大大的影响TPR和TNR。有时可以根据具体问题和需要,来选择具体的临界点。
来看看这个图就一目了然了,ROC曲线需要两个数据集,预测数据+实际数据。
如果我们选择一系列的临界点,就会得到一系列的TPR和TNR,将这些值对应的点连接起来,就构成了ROC曲线。ROC曲线可以帮助我们清楚的了解到这个分类器的性能表现,还能方便比较不同分类器的性能。在绘制ROC曲线的时候,习惯上是使用1-TNR作为横坐标,TPR作为纵坐标。下面来看看如何在R语言中绘制ROC曲线。
2、AUC值
为了更好的衡量ROC所表达结果的好坏,Area Under Curve(AUC)被提了出来,简单来说就是曲线右下角部分占正方形格子的面积比例。该比例代表着分类器预测精度。
————————————————————————————————————————————————————————
参考以下的博客:转载于:http://www.r-bloggers.com/lang/chinese/1205
该博客示范了三种画出ROC曲线的方法,第一种主动自己运算、第二种ROCR包、第三种pROC包。
# 做一个logistic回归,生成概率预测值 model1 <- glm(y~., data=newdata, family='binomial') pre <- predict(model1,type='response') # 将预测概率prob和实际结果y放在一个数据框中 data <- data.frame(prob=pre,obs=newdata$y) # 按预测概率从低到高排序 data <- data[order(data$prob),] n <- nrow(data) tpr <- fpr <- rep(0,n) # 根据不同的临界值threshold来计算TPR和FPR,之后绘制成图 for (i in 1:n) { threshold <- data$prob[i] tp <- sum(data$prob > threshold & data$obs == 1) fp <- sum(data$prob > threshold & data$obs == 0) tn <- sum(data$prob < threshold & data$obs == 0) fn <- sum(data$prob < threshold & data$obs == 1) tpr[i] <- tp/(tp+fn) # 真正率 fpr[i] <- fp/(tn+fp) # 假正率 } plot(fpr,tpr,type='l') abline(a=0,b=1)
2、ROCR包
R中也有专门用来绘制ROC曲线的包,例如常见的ROCR包,它不仅可以用来画图,还能计算ROC曲线下面积AUC,以评价分类器的综合性能,该数值取0-1之间,越大越好。
library(ROCR) pred <- prediction(pre,newdata$y) performance(pred,'auc')@y.values #AUC值 perf <- performance(pred,'tpr','fpr') plot(perf)
注意:其中pre是分类器预测的模型,而newdata$y是实际值。
3、pROC包
ROCR包画图函数功能比较单一,笔者比较偏好使用功能更强大的pROC包。它可以方便比较两个分类器,还能自动标注出最优的临界点,图看起来也比较漂亮
library(pROC) modelroc <- roc(newdata$y,pre) plot(modelroc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2), grid.col=c("green", "red"), max.auc.polygon=TRUE, auc.polygon.col="skyblue", print.thres=TRUE)
——————————————————————————————————————————————
笔者在操作的时候出现以下的问题:
Error in prediction(tablebank, bank_part$y_n) : Number of cross-validation runs must be equal for predictions and labels.
网上的解决方案有:
在这种情况下预测(预测,标签,标签。 点= NULL)函数类的“预测”和“标签”变量应该列表或矩阵。
本文有两个ROC曲线绘制包,可参考。
转载于:http://www.r-bloggers.com/lang/chinese/1205
每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~
———————————————————————————
R语言︱ROC曲线——分类器的性能表现评价的更多相关文章
- R语言︱机器学习模型评估方案(以随机森林算法为例)
笔者寄语:本文中大多内容来自<数据挖掘之道>,本文为读书笔记.在刚刚接触机器学习的时候,觉得在监督学习之后,做一个混淆矩阵就已经足够,但是完整的机器学习解决方案并不会如此草率.需要完整的评 ...
- R语言︱机器学习模型评价指标+(转)模型出错的四大原因及如何纠错
笔者寄语:机器学习中交叉验证的方式是主要的模型评价方法,交叉验证中用到了哪些指标呢? 交叉验证将数据分为训练数据集.测试数据集,然后通过训练数据集进行训练,通过测试数据集进行测试,验证集进行验证. 模 ...
- 如何在R语言中使用Logistic回归模型
在日常学习或工作中经常会使用线性回归模型对某一事物进行预测,例如预测房价.身高.GDP.学生成绩等,发现这些被预测的变量都属于连续型变量.然而有些情况下,被预测变量可能是二元变量,即成功或失败.流失或 ...
- 机器学习--PR曲线, ROC曲线
在机器学习领域,如果把Accuracy作为衡量模型性能好坏的唯一指标,可能会使我们对模型性能产生误解,尤其是当我们模型输出值是一个概率值时,更不适宜只采取Accuracy作为衡量模型性泛化能的指标.这 ...
- ROC曲线及AUC评价指标
很多时候,我们希望对一个二值分类器的性能进行评价,AUC正是这样一种用来度量分类模型好坏的一个标准.现实中样本在不同类别上的不均衡分布(class distribution imbalance pro ...
- ROC曲线是通过样本点分类概率画出的 例如某一个sample预测为1概率为0.6 预测为0概率0.4这样画出来,此外如果曲线不是特别平滑的话,那么很可能存在过拟合的情况
ROC和AUC介绍以及如何计算AUC from:http://alexkong.net/2013/06/introduction-to-auc-and-roc/ ROC(Receiver Operat ...
- ROC曲线 VS PR曲线
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&ut ...
- ROC曲线、AUC、Precision、Recall、F-measure理解及Python实现
本文首先从整体上介绍ROC曲线.AUC.Precision.Recall以及F-measure,然后介绍上述这些评价指标的有趣特性,最后给出ROC曲线的一个Python实现示例. 一.ROC曲线.AU ...
- 【机器学习与R语言】12- 如何评估模型的性能?
目录 1.评估分类方法的性能 1.1 混淆矩阵 1.2 其他评价指标 1)Kappa统计量 2)灵敏度与特异性 3)精确度与回溯精确度 4)F度量 1.3 性能权衡可视化(ROC曲线) 2.评估未来的 ...
随机推荐
- int main()还是void main()
按照新的C99标准,即使函数本身没有定义返回值,编译器也会加上,以返回给激发程序,运行状态.很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的.C/C++ 中从来没有定义过 ...
- Python selenium 一个节点两个关联input
HTML代码: 一个节点两个关联input 多出现于密码框 先需要模拟点击进入第一个input,才能激活第二个input. 代码: driver.find_element_by_name('Text ...
- form表单中get和post两种提交方式的区别
一.form表单中get和post两种提交方式的区别? 1.get提交表单中的内容在链接处是可见的.post不可见 2.post相比于get是安全的 3.post不收限制大小,get有限制大小(黑马视 ...
- iOS-沙盒目录
///沙盒路径 + (NSString *)pathDocument{ NSFileManager *fileManager = [[NSFileManager alloc]init]; NSStri ...
- xBIM 日志操作
目录 xBIM 应用与学习 (一) xBIM 应用与学习 (二) xBIM 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 xBIM 格式之间转换 xBIM 使用Linq 来优化查询 x ...
- 用fiddler2调试localhost
1.用 http://localhost. (locahost紧跟一个点号): 2.用 http://127.0.0.1. (127.0.0.1紧跟一个点号): 3.用 http://machinen ...
- BZOJ 2734: [HNOI2012]集合选数 [DP 状压 转化]
传送门 题意:对于任意一个正整数 n≤100000,如何求出{1, 2,..., n} 的满足若 x 在该子集中,则 2x 和 3x 不能在该子集中的子集的个数(只需输出对 1,000,000,001 ...
- Ansible进阶--playbook的使用
一.什么是playbooksplaybooks是ansible的脚本.如同shell脚本一样,它是控制远程主机的一系列命令的集合,通过YAML语言编写.执行一些简单的任务,我们可以使用ad-hoc命令 ...
- LNMP搭建02 -- 编译安装Nginx
[编译安装Nginx] 为了顺利安装Nginx,先安装下面这些: [CentOS 编译 nginx 前要做的事情] yum install gcc gcc-c++ kernel-devel yum ...
- 关于Frame加背景的那点事?
最近新生问我一个问题,继承自Frame(可不是继承自JFrame)的框架怎样添加背景图片, 真够坑的,当时还真懵了,废话少说直接上代码: import java.awt.*; import java. ...