ROC曲线绘制及AUC计算
来源:互联网 发布:初学数控车床编程教程 编辑:程序博客网 时间:2024/05/17 21:43
ROC曲线绘制及AUC计算
ROC曲线可以直观的反映分类性能,而AUC则可定量的对分类器进行测评。今天我们以简洁的方式说明ROC曲线的绘制及AUC的计算方法。
方法一 按定义进行计算
步骤:
1.1给定一个常量N,把区间[0,1]均等地分成N分,依次取k=0,1/N,2/N,…N-1/N,1作为阈值,对测试数据进行分类。
1.2 对于每一个给定的阈值,计算:
a. TP 、FP、TN、FN实例的个数。
b.TPR = nTP/(nTP + nFN);
FPR = nFP/(nFP + nTN);c.由(FPR,TPR)构成ROC曲线上的点。
1.3 通过一系列坐标点会制ROC曲线。
1.4 计算AUC:
a.将坐标点按照横着FPR排序
b.计算第i个坐标点和第i+1个坐标点的间距 dx;
c.获取第i(或者i+1)个坐标点的纵坐标y;
d.计算面积微元ds = ydx;
e.对面积微元进行累加,得到AUC。
Matlab实现
function [ auc ] = ROCDrawing( predict_label ) %% ploting ROC and computing AUC. Version(1)% input param: predict_label n-by-2 matrices.% column 1: probabilities for positive instances.% column 2: labels of instances.% output param: auc.% --by.Joly Zhang 10-22-2016%%%L= 1000;p = zeros(L,2);ix = 1;for k = 0:1/L:1 preT = predict_label(:,1) > k; preF = predict_label(:,1) <= k; TP = predict_label(preT,2) == 1; FP = predict_label(preT,2) == 0; FN = predict_label(preF,2) == 1; TN = predict_label(preF,2) == 0; TPR = sum(TP)/(sum(TP)+sum(FN)); FPR = sum(FP)/(sum(FP)+sum(TN)); p(ix,:) = [FPR, TPR]; ix = ix+1;endplot(p(1:L-3,1),p(1:L-3,2),'-');hold on;plot(0:1/L:1,0:1/L:1,'.-g');%% 计算AUC[vl,id] = sort(p(:,1));s = 0;for i_blob = 1:L-1; s = s+ p(id(i_blob+1),2)*(vl(i_blob+1)-vl(i_blob));endauc =s;end
方法二 基于对ROC曲线的理解
我们来简单的分析一下:
1.横轴FPR表示所有的负实例中,错误地分类为正实例的比例。那么就可以认为,横轴[0,1]区间被划分为无数个小区间,每个区间长度为dx=1/(nFP+nTN)。并且,每出现一个负实例,ROC曲线局部沿横轴方向往右移动一个单位距离。
2.纵轴PTR表示所有的正实例中,准确地预测为正实例的比例。那么就可以认为,纵轴[0,1]区间被划分为无数个小区间,每个区间长度为dy=1/(nTP+nFN)。并且,每出现一个正实例,ROC曲线局部沿横轴方向往上移动一个单位距离。
3.由此,我们可以从坐标原点(0,0)向右上方运动至(1,1)每次移动方向由预测实例的实际分类标签所决定。(当然,在此之前要对预测概率进行排序。移动方向也可以从右上角至坐标原点)。
4.每当在水平方向上移动时,不要忘了计算面积微元ds =ydx,并进行累加哦。
Matlab实现
function [ auc ] = ROCDrawing( predict_label )%% ploting ROC and computing AUC. Version(2)% input param: predict_label n-by-2 matrices.% column 1: probabilities for positive instances.% column 2: labels of instances.% output param: auc.% --by.Joly Zhang 10-22-2016%%%NP = sum(predict_label(:,2)==1);NN = sum(predict_label(:,2)==0);step_x = 1/NN;step_y = 1/NP;[~,id] = sort(predict_label(:,1));len =size(predict_label,1);point = zeros(len,2);point(len,:) = [1,1];%start from right-top positions = 0;for k = len:-1:2 if predict_label(id(k),2) ==1%从右上至左下,向下 point(k-1,:) =[point(k,1),point(k,2) - step_y]; else point(k-1,:) =[point(k,1)-step_x,point(k,2)]; s = s + point(k,2); endendplot(point(:,1),point(:,2),'r');hold on;plot(0:1/len:1,0:1/len:1,'.');auc = s*step_x;end
- ROC曲线绘制及AUC计算
- ROC曲线及AUC计算
- 计算AUC和绘制ROC曲线
- 人脸认证-ROC曲线绘制计算AUC和ACC
- ROC曲线与AUC计算
- ROC曲线与AUC计算
- 广告计算中的AUC和ROC曲线
- ROC曲线和AUC面积计算 matlab
- 广告计算中的AUC和ROC曲线
- py2.7 : 《机器学习实战》 Adaboost 2.24号:ROC曲线的绘制和AUC计算函数
- ROC曲线及AUC评价指标
- ROC曲线及AUC评价指标
- ROC曲线及AUC评价指标
- ROC曲线及AUC评价指标
- ROC,AUC,PR,AP及python绘制
- ROC曲线,AUC,
- ROC曲线与AUC
- ROC曲线与AUC
- Ruby对象模型 -整理
- 209. Minimum Size Subarray Sum
- 看我一个毕业一年的小菜是怎么对自己规划的,各路神仙请参考和指点
- 关于RxJava最友好的文章
- 还有60来天考研,FIGHTING!!!
- ROC曲线绘制及AUC计算
- repo下载国内链接android源码
- 树、二叉树概念
- VMware虚拟机中的CentOS安装Nginx后本机无法访问的解决办法
- java.lang.NoClassDefFoundError: org/slf4j/Logger 错误的解决
- 虚拟机当成一个纯粹人编译器(win-nfs-server)
- Leetcode 414. Third Maximum Number (Easy) (cpp)
- phpexcel 读取数据
- Leetcode 56. Merge Intervals (Hard) (cpp)