1、评估参数定义
1.1、召准率(Precision)
召准率是衡量模型预测正类标签时的准确度的指标。它计算的是模型预测的正类中真正为正类的比例。换句话说,召准率表示在所有预测为正类的实例中,正确识别为正类的实例所占的比例。
其中,TP:True positive, FP: False positive。即TP代表正样本中预测正确的数量,FP代表正样本中错误预测的数量。
1.2、召回率(Recall)
召回率,也称为敏感度或真正类率,衡量的是模型找到所有正类实例的能力。它计算的是模型预测的正类中真正为正类的实例与数据集中实际正类实例总数的比例。换句话说,召回率表示模型正确识别的实际正类实例所占的比例。
其中,FN为负样本中预测错误的数量。
1.3、F1-score
F1分数是召准率和召回率的调和平均数,它提供了一个单一的值来评估模型的性能,平衡了召准率和召回率。它计算的是召准率和召回率的加权平均数,权重是各自值的倒数。F1分数的范围从0到1,其中1是最好的分数,表示既有高召准率又有高召回率。
1.4、灵敏度(Sensitivity or True Positive Rate,TPR)
假设有一个用于疾病检测的机器学习模型,其任务是将患者分为患病(正类)或健康(负类)。灵敏度是衡量模型正确识别患病者的能力。例如,如果模型在100个实际患病的人中正确识别出90个,那么该模型的灵敏度为90%。
1.5、特异度(Specificity or True Negative Rate,TNR)
同样是在上述疾病检测的场景中,特异度是衡量模型正确识别健康人的能力。例如,如果模型在100个实际健康的人中正确识别出95个,那么该模型的特异度为95%。
理想情况下,一个好的分类模型应该同时具有高的灵敏度和特异度,但在实际应用中,这通常是一个权衡的过程。
2、算法示例(基于Keras)
示例是在天然地震数据信号和噪声二分类的程序中使用的,因此使用前三个衡量指标及准确度来做示例
from sklearn.metrics import accuracy_score, precision_score, recall_scoretest_labels = label
predicted_classes = outaccuracy = accuracy_score(test_labels,predicted_classes)
precision = precision_score(test_labels,predicted_classes)
recall = recall_score(test_labels,predicted_classes)
F1_score1 = 2*precision*recall/(precision+recall)
print(f'The accuracy of the model is {accuracy}, the precision is {precision}, the recall is {recall}, and the F1 scorei is {F1_score1}.')
3、效果展示:
4、Keras环境下的混淆矩阵绘制
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay C = confusion_matrix(test_labels, predicted_classes)
print(C)disp = ConfusionMatrixDisplay(confusion_matrix=C, display_labels=['earthquake','noise'])
disp.plot(cmap='YlOrRd', values_format='')
#plt.title(f'Classification CNN Results ({self.epochs} epochs)')
plt.yticks(rotation=90)
plt.tight_layout()
plt.savefig('confusion_matrix_test.png', dpi=600)
plt.show()