如何绘制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 = n-tn;
fn = p-tp;
精确度和召回率的公式是
precision = tp/(tp+fp)
但有了这个,我得到了一些不受欢迎的情节。
我使用以下命令获得了CNN的分数:
[YTest,score]=classify(convnet,TestData)
答案 0 :(得分:1)
MATLAB具有在统计和机器学习工具箱中创建ROC曲线和类似性能曲线(如精确调用曲线)的功能:perfcurve
。
默认情况下,计算ROC曲线。
该函数具有以下语法:
[X, Y] = perfcurve(labels, scores, posclass)
此处,labels
是每个样本的真实标签,scores
是CNN(或任何其他分类器)的预测,posclass
是您假设的类的标签成为"积极的" - 在您的示例中似乎是1
。 perfcurve
函数的输出是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):
答案 1 :(得分:0)