ROC曲线原理及其matlab实现源码
2017-07-11 13:44
1751 查看
ROC曲线和AUC经常用来评价二分类器的好坏,ROC简单的说就是在不断地调整阀值(正例置信度)的条件下,求TPR(True Positive Rate)和FPR(False Positive Rate)的值,具体的定义如下图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/16/dca5d79f0ce61625c294bd89e9e55973)
由于我们实验室做的是气象方面,所以使用的是POD,FAR和CSI
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/16/617c579a05e4ed8d56288d10b4ab58d5)
四个特殊点和一条直线:
(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源码:
参考网址:
(1)https://www.douban.com/note/284051363/
由于我们实验室做的是气象方面,所以使用的是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就减少了1,TP+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/
相关文章推荐
- 分享非常漂亮的WPF界面框架源码及其实现原理
- Redis源码中探秘SHA-1算法原理及其编程实现
- Precision/Recall和ROC曲线原理以及Matlab源码
- 双边滤波器原理及其matlab实现
- Hessian矩阵提取特征点原理及其Matlab实现
- Precision/Recall和ROC曲线原理以及Matlab源码
- ROC曲线及其matlab实现ROC曲线的绘画
- ROC曲线及其matlab实现ROC曲线的绘画
- 微信云控系统的实现原理,微信云控系统源码之服务器推送的实现及其核心代码
- Hough变换 直线检测原理及其Matlab实现
- (10) java源码分析 ---- HashMap源码分析 及其 实现原理分析
- (10) java源码分析 ---- HashMap源码分析 及其 实现原理分析
- K-Means聚类算法原理及其python和matlab实现
- spring AOP 源码解析 及其实现原理
- BP神经网络原理及其matlab实现
- ROC曲线及其matlab实现ROC曲线的绘画
- 分享非常漂亮的WPF界面框架源码及其实现原理
- 直方图规定化——Matlab实现及其原理
- Precision/Recall和ROC曲线原理以及Matlab源码
- Yale CAS实现原理及其基础协议