ROC曲线原理及其matlab实现源码

ROC曲线和AUC经常用来评价二分类器的好坏,ROC简单的说就是在不断地调整阀值(正例置信度)的条件下,求TPR(True Positive Rate)和FPR(False Positive Rate)的值,具体的定义如下图:
这里写图片描述
由于我们实验室做的是气象方面,所以使用的是POD,FAR和CSI
这里写图片描述
四个特殊点和一条直线:
(1)(0,0)全部预测为负类,TPR=FPR=0,即TP=FP=0,
(2)(0,1)全部分类正确,TPR=1,FPR=0,即FN=0(每个正例都预测正确),FP=0(所有的的负类分类正确)
(3)(1,1)全部预测为正类,TPR=FPR=1,FN=0(所有的正类都预测对了),TN=0(所有的负类都预测错了)
(4)(1,0)全部分类错误,TPR=0,FPR=1,即TP=0,TN=0(没有预测对的)
(5)y=x直线:下面考虑ROC曲线图中的虚线y=x上的点,这条对角线上的点其实表示的是一个采用随机猜测策略的分类器的结果,例如(0.5,0.5),表示该分类器随机对于一半的样本猜测其为正样本,另外一半的样本为负样本

matlab源码:

dec = load('dec_values.txt');%所有样本的预测概率,即一个样本对应一个1*2维的向量,分别对应属于负类和正类的概率
value = load('test_label_54.txt');%真实标签
predict = dec(:,2);%获取属于正类的概率
ground_truth = value;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%初始点为(1.0, 1.0)  
x = 1.0;  
y = 1.0;  
%计算出ground_truth中正样本的数目pos_num和负样本的数目neg_num  
pos_num = sum(ground_truth==1);  
neg_num = sum(ground_truth==0);  
%根据该数目可以计算出沿x轴或者y轴的步长  
x_step = 1.0/neg_num;  
y_step = 1.0/pos_num;  
%首先对predict中的分类器输出值按照从小到大排列  
[predict,index] = sort(predict);  
ground_truth = ground_truth(index);  
%对predict中的每个样本分别判断他们是FP或者是TP  
%遍历ground_truth的元素,  
%若ground_truth[i]=1,则TP减少了1,往y轴方向下降y_step
%实际上就是一当前样本属于正类的概率为阀值,当前样本实际是正类,但是我们预测成了负类,TP就减少了1TP+FN是实际正类的数量,这肯定是不变的,以下同理可得  
%若ground_truth[i]=0,则FP减少了1,往x轴方向下降x_step  
for i=1:length(ground_truth)  
    if ground_truth(i) == 1  
        y = y - y_step;  
    else  
        x = x - x_step;  
    end  
    X(i)=x;  
    Y(i)=y;  
end  
%画出图像 
XX = X;
YY = Y;
plot(X,Y,'-kp','LineWidth',1,'MarkerSize',1);  
xlabel('False Positive Rate');  
ylabel('True Positive Rate');  
%计算小矩形的面积,返回auc   
auc = -trapz(X,Y);
title(['ROC Curve of (AUC = ',num2str(auc),')']);

参考网址:
(1)https://www.douban.com/note/284051363/

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值