如何在MATLAB中绘制CNN的精度和调用?

时间:2018-04-05 08:04:47

标签: matlab

如何绘制CNN的精确度和召回曲线? 我已经从CNN生成了分数,并想绘制精确回忆曲线,但我无法得到它。 我使用以下方式计算了TPTNFPFN

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)

2 个答案:

答案 0 :(得分:1)

MATLAB具有在统计和机器学习工具箱中创建ROC曲线和类似性能曲线(如精确调用曲线)的功能:perfcurve。 默认情况下,计算ROC曲线。 该函数具有以下语法:

[X, Y] = perfcurve(labels, scores, posclass)

此处,labels是每个样本的真实标签,scores是CNN(或任何其他分类器)的预测,posclass是您假设的类的标签成为"积极的" - 在您的示例中似乎是1perfcurve函数的输出是ROC曲线的(x, y)坐标,因此您可以使用

轻松绘制它
plot(X, Y)

要使perfcurve绘制精确回忆曲线而不是ROC曲线,您必须设置函数的可选'XCrit''YCrit'参数。如文档中所述,不同的预定义标准,如误报数('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])

例如(使用随机生成的数据和SVM):

Sample precision recall curve

答案 1 :(得分:0)

hbaderts 的答案是正确的,但是答案的结尾是错误的。

[X,Y] = perfcurve(labels,scores,posclass,'xCrit', 'fpr', 'yCrit', 'tpr');

则所生成的接收器工作特性(ROC)曲线正确。 enter image description here