我想在循环中计算接收器工作特性曲线下的面积。我的循环使用某种交叉验证。在某些迭代中,我的代码突然停止并为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?
答案 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。