概念
介绍混淆矩阵:
详细定义概率见小白入门-深度学习模型各类评估指标大全(一)_大模型五大类评测指标-CSDN博客
True Positive(TP):真正类。样本的真实类别是正类,并且模型识别的结果也是正类。
False Negative(FN):假负类。样本的真实类别是正类,但是模型将其识别为负类。
False Positive(FP):假正类。样本的真实类别是负类,但是模型将其识别为正类。
True Negative(TN):真负类。样本的真实类别是负类,并且模型将其识别为负类。
精确率是指模型正确预测正样本数与模型预测出的全部正样本数的比例。召回率则衡量了模型正确预测为正样本的数量与真正的正样本总数的比例。计算公式如下:
精确率(Precision) = TP / (TP + FP)
召回率(Recall) = TP / (TP + FN)
代码实现
matlab绘制混淆矩阵,求精确率与召回率代码:
confMat1 = confusionmat(validationDS.Labels, labels);
precision_class= diag(confMat1)'./sum(confMat1, 1);
weights_precision = sum(confMat1, 2)'/ sum(confMat1(:)); % 计算每个类别的权重
precision = sum(precision_class .* weights_precision) % 计算加权平均的模型召回率
recall_class = diag(confMat1)./sum(confMat1, 2);
weights_recall = sum(confMat1, 2) / sum(confMat1(:)); % 计算每个类别的权重
recall = sum(recall_class .* weights_recall) % 计算加权平均的模型召回率
得到的混淆矩阵confMat1,纵向为实际标签,横向为预测标签。
sum(confMat1,1),表示对confMat1的列求和,相当于求TP+FP;sum(confMat1,2),表示对confMat1的行求和,相当于求TP+FN,这里采用加权平均法求精确率与召回率,其中,权重为每个类别在实际标签中的占比。
往往模型训练中还会计算准确率(accuracy),我采用的是正确例子/总例子的方法,代码如下:
sum(diag(confMat1),'all')/sum(confMat1,'all')
(matlab中,对矩阵中所有数求和,要用all)