ROC 曲线绘制
个人的浅显理解:1.ROC曲线必须是针对连续值输入的,通过选定不同的阈值而得到光滑而且连续的ROC曲线,故通常应用于Saliency算法评价中,因为可以选定0~255中任意的值进行阈值分割,从而得到ROC曲线;
2.对于图像分割算法的评价不适合用ROC曲线进行评价,除非能够得到连续值,而不是二值图像;图像分割算法适合采用准确率、召回率、F1指标的平均值进行评价。
3.针对已经分割好的二值图像:分割出了一系列的分割二值图,除非分割的结果足够大,否则很难得到良好的ROC曲线,一般都是波动很大的,如下图所示。
matlab中已经有现成的针对分类的ROC曲线绘制函数。
目前理解的并不透彻,以下资料可供进一步学习,记录以备忘:
http://blog.sina.com.cn/s/blog_4cf8aad30100gt1g.html
http://www.ilovematlab.cn/thread-62962-1-1.html
http://blog.csdn.net/fuhpi/article/details/8813455
论文:The relationship between Precision-Recall and ROC curves.pdf
matlab中plotroc函数的用法说明:
ROC曲线是通用的分类器评价工具,matlab函数中自带了绘制该曲线的函数plotroc。
plotroc函数的原型为:plotroc(targets, outputs)
其中参数targets是一个矩阵,代表测试集,每一列表示一个测试样本的标签
如果有两类样本,比如第1,2,5个样本属于第1类,第3,4,6个样本属于第2类....则targets应为:
1 1 0 0 1 0 ...
0 0 1 1 0 1 ...
如果只有一类样本,包含了负样本,则只要一行,用1表示正样本,0表示负样本即可,比如targets为:
1 0 1 1 0 0 0 0 1 ...
参数outputs也是一个矩阵,代表分类结果,同样每一列表示一个测试样本的分类结果
同样如果有两类样本,则应有两个分类器,每一列记录了每个测试样本在两个分类器上的得分,此时outputs为:
0.8 0.85 0.2 0.75 0.21 ...
0.8 0.01 0.9 0.23 0.67 ...
如果只有一类,则outputs只有一行,如:
0.8 0.6 0.8 0.7 0.05 0.3 0.03 ...
注意,得分必须在[0, 1]的区间内,可以自己规约一下。
我们将相应的测试标签targets和对应的分类得分outputs输入plotroc中就可以绘制出相应的ROC曲线了。