机器学习、深度学习模型评估指标—整理笔记

标签: 机器学习      python  分类评估指标  机器学习

一、混淆矩阵的定义

(1)若一个实例是正类,但是被预测成为正类,即为真正类(True Postive TP)

(2)若一个实例是正类,但是被预测成为负类,即为假负类(False Negative FN)

(3)若一个实例是负类,但是被预测成为正类,即为假正类(False Postive FP)

(4)若一个实例是负类,但是被预测成为负类,即为真负类(True Negative TN)
表中1代表正类,0代表负类。
在这里插入图片描fdsfsd述

二、准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure

1.准确率(Accuracy)

准确率(正确率)=所有预测正确的样本/总的样本 ,所有预测正确(正类负类)的占总的比重在这里插入图片描述
准确率是分类问题中最简单直观的评价指标,但存在明显的缺陷。比如如果样本中有99%的样本为正样本,那么分类器只需要一直预测为正,就可以得到99%的准确率,但其实际性能是非常低下的。也就是说,当不同类别样本的比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素。
下面我们看一下sklearn中计算准确率的示例:

import numpy as np
from sklearn.metrics import accuracy_score

y_pred = [0, 2, 1, 3]
y_true = [0, 1, 2, 3]
print(accuracy_score(y_true, y_pred))  # 0.5
print(accuracy_score(y_true, y_pred, normalize=False))  # 2

# 在具有二元标签指示符的多标签分类案例中
print(accuracy_score(np.array([[0, 1], [1, 1]]), np.ones((2, 2))))  # 0.5

2.精确率(Precision)

也叫查准率,精确率= 将正类预测为正类 / 所有预测为正类
在这里插入图片描述
精确率直观地可以说是分类器不将负样本标记为正样本的能力,精确率最好的值是1,最差的值是0.
下面我们看一下sklearn中计算精确率的示例代码:

from sklearn.metrics import precision_score

y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
print(precision_score(y_true, y_pred, average='macro'))  # 0.2222222222222222
print(precision_score(y_true, y_pred, average='micro'))  # 0.3333333333333333
print(precision_score(y_true, y_pred, average='weighted'))  # 0.2222222222222222
print(precision_score(y_true, y_pred, average=None))  # [0.66666667 0.         0.        ]

3.召回率(Recall)

也叫查全率,召回率 = 将正类预测为正类 / 所有正真的正类

在这里插入图片描述
召回率直观地说是分类器找到所有正样本的能力.召回率最好的值是1,最差的值是0.
通俗的理解就是准确率就是找得对,召回率就是找得全。
看一下sklearn中计算召回率(Recall)的示例代码:

from sklearn.metrics import recall_score
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
print(recall_score(y_true, y_pred, average='macro'))  # 0.3333333333333333
print(recall_score(y_true, y_pred, average='micro'))  # 0.3333333333333333
print(recall_score(y_true, y_pred, average='weighted'))  # 0.3333333333333333
print(recall_score(y_true, y_pred, average=None))  # [1. 0. 0.]

4.F1 score

F1 是精确率和召回率的调和平均值,计算公式为:
F值 = 精确率 * 召回率 * 2 / ( 精确率 + 召回率) (F 值即为精确率和召回率的调和平均值)
在这里插入图片描述
F1也被叫做F-score或F-measure.
Precision体现了模型对负样本的区分能力,Precision越高,模型对负样本的区分能力越强;Recall体现了模型对正样本的识别能力,Recall越高,模型对正样本的识别能力越强。F1 score是两者的综合,F1 score越高,说明模型越稳健。

from sklearn.metrics import f1_score
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
print(f1_score(y_true, y_pred, average='macro'))  # 0.26666666666666666
print(f1_score(y_true, y_pred, average='micro'))  # 0.3333333333333333
print(f1_score(y_true, y_pred, average='weighted'))  # 0.26666666666666666
print(f1_score(y_true, y_pred, average=None))  # [0.8 0.  0. ]

补充说明:


1213

三、ROC曲线和AUC

ROC和AUC是评价分类器的指标。

1.ROC曲线

接收者操作特征(receiver operating characteristic),roc曲线上每个点反映着对同一信号刺激的感受性。
横轴:假正类率(false postive rate FPR),也叫伪阳性率

纵轴:真正类率(true postive rate TPR),也叫真阳性率

由上表可得出横,纵轴的计算公式:

(1)真正类率(True Postive Rate)TPR: TP/(TP+FN), 代表分类器 预测为正类中实际为正实例占所有正实例的比例。
(2)假正类率(False Postive Rate)FPR: FP/(FP+TN),代表分类器 预测为正类中实际为负实例占所有负实例的比例。

如下图所示,(a)图中实线为ROC曲线,(深绿色)线上每个点对应一个阈值(threshold)。假设是二分类分类器,输出为每个实例预测为正类的概率。那么通过设定一个特定阈值(threshold),预测为正类的概率值 大于等于 特定阈值的为 正类,小于 特定阈值的为 负类,然后统计TP、TN、FP、FN每个类别的数目,然后根据上面的公式,就能对应的就可以算出一组 特定阈值下(FPR,TPR)的值,即 在平面中得到对应坐标点。如果这里没懂也没关系,下面有详细的例子说明。

右上角的阈值最小,对应坐标点(1,1);左下角阈值最大,对应坐标点为(0,0)。从右上角到左下角,随着阈值的逐渐减小,越来越多的实例被划分为正类,但是这些正类中同样也掺杂着真正的负实例,即TPR和FPR会同时增大。

在这里插入图片描述
横轴FPR: FPR越大,预测正类中实际负类越多。

纵轴TPR:TPR越大,预测正类中实际正类越多。

理想目标:TPR=1,FPR=0,即图中(0,1)点,此时ROC曲线越靠拢(0,1)点,越偏离45度对角线越好。

2.AUC(Area under Curve)

Roc曲线下的面积,通常,AUC的值介于0.5到1.0之间。AUC作为数值可以直观的评价分类器的好坏,值越大越好。

计算出ROC曲线下面的面积,就是AUC的值。
在这里插入图片描述
AUC计算工具:
链接: http://mark.goadrich.com/programs/AUC/.

P/R和ROC是两个不同的评价指标和计算方式,一般情况下,检索用前者,分类、识别等用后者。

参考链接:
http://www.vanjor.org/blog/2010/11/recall-precision/.

http://bubblexc.com/y2011/148/.

http://wenku.baidu.com/view/ef91f011cc7931b765ce15ec.html.

3.P-R曲线

评价一个模型的好坏,不能仅靠精确率或者召回率,最好构建多组精确率和召回率,绘制出模型的P-R曲线。
下面说一下P-R曲线的绘制方法。P-R曲线的横轴是召回率,纵轴是精确率。P-R曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本,小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率。整条P-R曲线是通过将阈值从高到低移动而生成的。原点附近代表当阈值最大时模型的精确率和召回率。
关于P-R曲线,因为我自己使用的比较少,所以这里就不深入给大家说了。
sklearn里P-R曲线的使用可以参考:precision_recall_cure。
P-R曲线的理解可以参考这篇博客:P-R曲线深入理解。

【参考文献】
[1]: https://blog.csdn.net/hfutdog/article/details/88085878
[2]: https://blog.csdn.net/u013063099/article/details/80964865
[3]: hhttps://blog.csdn.net/u011630575/article/details/80250177
[4]: https://blog.csdn.net/u012879957/article/details/80564148

版权声明:本文为zonghaile123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zonghaile123/article/details/109428863