一、什么是分类评估指标
我们进行分类任务建模的时候,需要通过一些指标来判断模型的表现,这就是我们所说的分类评估指标。模型训练的过程中,损失可以看作是模型对训练集学习的熟练程度,但它并不能帮助我们判断模型是否已经可以应用于实践(比如模型损失很低了,但此时可能发生了过拟合,在测试集上的精确率可能很低),这时候就需要使用准确率、精确率之类的评估指标并结合测试集的数据来评估模型的分类性能,从而判断模型是否达到可应用到业务中的水准。
二、常用指标
分类任务中,常用的评估指标主要是Accuracy、Precision、Recall和F1值四个。假设TP(True Positives)是正确预测的正例数;TN(True Negatives)是正确预测的负例数;FP(False Positives)是错误预测为正例的负例数;FN(False Negatives)是错误预测为负例的正例数(有人说FN和FP很容易记混,其实只需要看前面的正负就可以了,False的就说明是错误的预测,所以False Positive就是预测为positive但是是错误的预测,也就是说False Positive=Negative,即预测为正例的负例)。以下是这些指标的计算公式:
1、Accuracy(准确率)
准确率是最直观的性能指标,它衡量的是模型预测正确的样本数占总样本数的比例:
2、Precision(精确率)
精确率衡量的是模型预测为正例的样本中,实际为正例的比例:
3、Recall(召回率)
召回率衡量的是所有实际为正例的样本中,模型预测正确的比例:
4、F1值
F1值是精确率和召回率的调和平均值,它试图在精确率和召回率之间找到一个平衡,是一个综合考虑精确率和召回率的性能指标。当精确率和召回率都很高时,F1 分数也会很高:
三、应用场景
1、Accuracy:当关心整体的预测准确性时,Accuracy 是一个重要的指标。但它可能不足以反映模型在正例或负例上的表现,尤其是在数据不平衡的情况下。
2、Precision:在正例的预测结果需要非常准确的情况下,如欺诈检测,Precision更重要。
3、Recall:在需要确保尽可能多的实际正例被预测出来的情况下,如疾病筛查,Recall更重要。
4、F1 Score:当需要同时考虑精确率和召回率时,F1分数是一个有效的指标。
四、python计算
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
# 假设 y_true 是真实的标签,y_pred 是模型预测的标签
y_true = [0, 1, 0, 1, 0]
y_pred = [0, 1, 0, 0, 1]
# 计算准确率
accuracy = accuracy_score(y_true, y_pred)
print(f'Accuracy: {accuracy:.2f}')
# 计算精确率
precision = precision_score(y_true, y_pred)
print(f'Precision: {precision:.2f}')
# 计算召回率
recall = recall_score(y_true, y_pred)
print(f'Recall: {recall:.2f}')
# 计算F1分数
f1 = f1_score(y_true, y_pred)
print(f'F1 Score: {f1:.2f}')
五、总结
除了上面提到的指标之外,还有其他的指标也同样有效,比如ROC(Receiver Operating Characteristic)曲线和AUC(Area Under the Curve)是评估二分类模型性能的重要工具。具体使用哪些指标需要根据任务需求确定,因为每个指标都有其不足,很难单凭一个指标比较模型表现的好坏。在建模过程中,通常我们会打印多个指标结果,并根据实际业务需求选择对应指标表现较好的模型,此时其他指标作为参考(毕竟总不能应用一个Precision是100%但Recall是1%的模型吧)。此外,在实际业务的交流过程中,建议使用英文称谓(笔者遇到有些人精确率、准确率/正确率不分的)。