在二进制分类中绘制ROC曲线返回"在真实类标签数组中找到少于两个类" MATLAB R2015a中的错误

时间:2015-03-24 16:58:43

标签: matlab classification roc

我想在循环中计算接收器工作特性曲线下的面积。我的循环使用某种交叉验证。在某些迭代中,我的代码突然停止并为perfcurve函数返回此错误:

Less than two classes are found in the array of true class labels.

当我检查曲线的输入时,我有例如:

labels=

     1     1     1     1     1     1     1     1     1     1     1     1     


scores=

     1     0     0     1     1     0     1     0     0     0     1     1   

我使用的功能是labels(labels,scores,'1')。正如你所知道的计算ROC,我们需要真正的正面率'和“误报率”#。我在上面的例子中有这两个值!为什么这个函数不能计算ROC?

2 个答案:

答案 0 :(得分:1)

它无法计算AUC,因为没有“误报率”'。真阳性(TP)和假阳性(FP)的定义:

TP: 1s which are (correctly) 1s.
FP: 0s which are (incorrectly) 1s.

基本上,如果你的标签都是0或1,你就不会同时获得TP和FP。

答案 1 :(得分:0)

你确定吗?你提到的使用功能'标签'吗? :)

perfcurve:

[X,Y] = perfcurve(标签,分数,posclass)计算给定真实类别标签,标签的分类器预测分数向量的ROC曲线。

标签可以是数字向量,逻辑向量,字符矩阵,字符串的单元格数组或分类向量。

分数是分类器为某些数据返回的分数的数值向量。

posclass是正类标签(标量),可以是数字(对于数字标签),逻辑(对于逻辑标签)或者是char。