如何在MATLAB中绘制CNN的精度和召回率?
如何绘制CNN的精确度和召回曲线? 我已经从CNN获得了分数,想要绘制精确回忆曲线,但我无法得到。 我使用以下公式计算了如何在MATLAB中绘制CNN的精度和召回率?,matlab,Matlab,如何绘制CNN的精确度和召回曲线? 我已经从CNN获得了分数,想要绘制精确回忆曲线,但我无法得到。 我使用以下公式计算了TP、TN、FP、和FN: idx = (ACTUAL()==1); p = length(ACTUAL(idx)); n = length(ACTUAL(~idx)); N = p+n; tp = sum(ACTUAL(idx)==PREDICTED(idx)); tn = sum(ACTUAL(~idx)==PREDICTED(~idx)); fp =
TP
、TN
、FP
、和FN
:
idx = (ACTUAL()==1);
p = length(ACTUAL(idx));
n = length(ACTUAL(~idx));
N = p+n;
tp = sum(ACTUAL(idx)==PREDICTED(idx));
tn = sum(ACTUAL(~idx)==PREDICTED(~idx));
fp = n-tn;
fn = p-tp;
精确性和召回率的计算公式为
precision = tp/(tp+fp)
但是有了这些,我得到了一些不想要的阴谋
我使用以下命令获得了CNN的分数:
[YTest,score]=classify(convnet,TestData)
MATLAB具有在统计和机器学习工具箱中创建ROC曲线和类似性能曲线(例如精度召回曲线)的功能:。 默认情况下,计算ROC曲线。 该函数具有以下语法:
[X, Y] = perfcurve(labels, scores, posclass)
这里,labels
是每个样本的真实标签,scores
是CNN(或任何其他分类器)的预测,posclass
是您假设为“肯定”的类的标签,在您的示例中,它似乎是1
。perfcurve
函数的输出是ROC曲线的(x,y)
坐标,因此您可以使用
plot(X, Y)
要使perfcurve
绘制精度调用曲线而不是ROC曲线,必须设置函数的可选参数和参数。如文档中所述,可以使用不同的预定义标准,如误报次数('fp'
)、真阳性率('tpr'
)、准确性('accu'
)等,甚至可以使用自定义函数
通过将'XCrit'
设置为'tpr'
(调用)并将'YCrit'
设置为'prec'
(精度),创建精度调用曲线:
[X, Y] = perfcurve(labels, scores, posclass, 'XCrit', 'tpr', 'YCrit', 'prec');
plot(X, Y);
xlabel('Recall')
ylabel('Precision')
xlim([0, 1])
ylim([0, 1])
例如(使用随机生成的数据和支持向量机):
hbaderts的答案是正确的,但答案的结尾是错误的
[X,Y] = perfcurve(labels,scores,posclass,'xCrit', 'fpr', 'yCrit', 'tpr');
然后生成的接收机工作特性(ROC)曲线是正确的。
CNN的预测分数为1000*100(100个班,每个班10个样本)。所以,当尝试使用perfcurve时,它给出了一个错误“您必须将分数作为浮点值的向量传递”。我所做的是按列求和来创建分数向量。我做得对还是错?如果错误,请建议我合适的方法。您只能评估二元分类的精度和召回率。我通常会建议为每个类绘制一条曲线。为此,您可以将
分数(:,k)
插入perfcurve
。如前所述,如果需要将它们聚合到一个绘图中,则有多种方法可以使用。最简单的方法是为如上所示的每个类创建绘图并对其进行平均。perfcurve中没有阈值。[X,Y,Thres,AUC]=perfcurve(标签,分数,true);“Thres”不是阈值吗?