跳转至

混淆矩阵、准确率、精确率/查准率、召回率/查全率、F1值、ROC曲线的AUC值

准确率、精确率(查准率)、召回率(查全率)、F1值、ROC曲线的AUC值,都可以作为评价一个机器学习模型好坏的指标(evaluation metrics),而这些评价指标直接或间接都与混淆矩阵有关,前四者可以从混淆矩阵中直接计算得到,AUC值则要通过ROC曲线进行计算,而ROC曲线的横纵坐标又和混淆矩阵联系密切,所以在了解这些评价指标之前,先知道什么是混淆矩阵很有必要,也方便记忆。

准确率、精确率(查准率)、召回率(查全率)、F1值、ROC曲线的AUC值,都可以作为评价一个机器学习模型好坏的指标(evaluation metrics),而这些评价指标直接或间接都与混淆矩阵有关,前四者可以从混淆矩阵中直接计算得到,AUC值则要通过ROC曲线进行计算,而ROC曲线的横纵坐标又和混淆矩阵联系密切,所以在了解这些评价指标之前,先知道什么是混淆矩阵很有必要,也方便记忆。

混淆矩阵

对于一个二分类问题,我们可以得到如表 1所示的的混淆矩阵(confusion matrix):

表 1:混淆矩阵

混淆矩阵

表 1 所示的混淆矩阵中,行表示数据在模型上的预测类别(predicted class/predicted condition),列表示数据的真实类别(actual class/true condition)。在看混淆矩阵时,要分清样本的真实类别和预测类别,有些地方的行列表示可能和这里不一致。在sklearn中,二分类问题下的混淆矩阵需要分别将表 1 中的predicted class和Actual class对调,将横纵坐标的positive class和negative class都分别对调,再重新计算混淆矩阵。

通过混淆矩阵,我们可以很直观地看清一个模型在各个类别(positive和negative)上分类的情况。

表 2:TP、FP、FN、TN

TP 真实类别为positive,模型预测的类别也为positive
FP 预测为positive,但真实类别为negative,真实类别和预测类别不一致
FN 预测为negative,但真实类别为positive,真实类别和预测类别不一致
TN 真实类别为negative,模型预测的类别也为negative

TP、FP、TN、FN,第二个字母表示样本被预测的类别,第一个字母表示样本的预测类别与真实类别是否一致。

准确率

准确率(accuracy)计算公式如下所示:

\[\begin{equation}\label{equ:accuracy} \mbox{accuracy} = \frac{TP+TN}{TP+TN+FP+FN} = \frac{TP+TN }{\mbox{all data}} \end{equation}\]

准确率表示预测正确的样本(TP和TN)在所有样本(all data)中占的比例。

在数据集不平衡时,准确率将不能很好地表示模型的性能。可能会存在准确率很高,而少数类样本全分错的情况,此时应选择其它模型评价指标。

精确率(查准率)和召回率(查全率)

positive class的精确率(precision)计算公式如下:

\[\begin{equation}\label{equ:precision} \mbox{precision} = \frac{TP}{TP+FP} = \frac{TP}{\mbox{预测为positive的样本}} \end{equation}\]

positive class的召回率(recall)计算公式如下:

\[\begin{equation}\label{equ:recall} \mbox{recall} = \frac{TP}{TP+FN} = \frac{TP}{\mbox{真实为positive的样本}} \end{equation}\]

positive class的精确率表示在预测为positive的样本中真实类别为positive的样本所占比例;positive class的召回率表示在真实为positive的样本中模型成功预测出的样本所占比例。

positive class的召回率只和真实为positive的样本相关,与真实为negative的样本无关;而精确率则受到两类样本的影响。

\(F_1\)值和\(F_\beta\)

\(F_1\)值的计算公式如下:

\[\begin{equation}\label{equ:f1} F_1 = \frac{2}{\frac{1}{\mbox{precision}}+\frac{1}{\mbox{recall}}} = \frac{2 \cdot \mbox{precision} \cdot \mbox{recall}}{\mbox{precision}+\mbox{recall}} \end{equation}\]

\(F_1\)值就是精确率和召回率的调和平均值,\(F_1\)值认为精确率和召回率一样重要。

\(F_\beta\)值的计算公式如下:

\[\begin{equation}\label{equ:fbeta} F_\beta = \frac{1+\beta^2}{\frac{1}{\mbox{precision}}+\frac{\beta^2}{\mbox{recall}}} = \frac{(1+\beta^2)\cdot\mbox{precision}\cdot\mbox{recall}}{\beta^2\cdot\mbox{precision}+\mbox{recall}} \end{equation}\]

\(\beta = 1\)时,\(F_\beta\)就是\(F_1\)值,此时\(F_\beta\)认为精确率和召回率一样重要;当\(\beta > 1\)时,\(F_\beta\)认为召回率更重要;当\(0< \beta < 1\)时,\(F_\beta\)认为精确率更重要。除了\(F_1\)值之外,常用的还有\(F_2\)\(F_{0.5}\)

ROC曲线及其AUC值

AUC全称为Area Under Curve,表示一条曲线下面的面积,ROC曲线的AUC值可以用来对模型进行评价。ROC曲线如图 1 所示:

recallcompleteness-accuracyaccuracy-valu_22Apr25102519360226_1.png

图 1:ROC曲线

(注:图片摘自https://en.wikipedia.org/wiki/Receiver_operating_characteristic

ROC曲线的纵坐标True Positive Rate(TPR)在数值上就等于positive class的recall,记作recall\(_{positive}\),横坐标False Positive Rate(FPR)在数值上等于(1 - negative class的recall),记作(1 - recall\(_{negative}\))如下所示:

\[\begin{equation}\label{equ:tpr} \begin{split} \mbox{TPR} &= \frac{TP}{TP + FN} \\ &= \mbox{recall$_{positive}$} \end{split} \end{equation}\]
\[\begin{equation}\label{equ:fpr} \begin{split} \mbox{FPR} &= \frac{FP}{FP + TN} = \frac{FP + TN -TN}{FP + TN} \\ &= 1 - \frac{TN}{FP + TN} \\ &= 1 - \mbox{recall$_{negative}$} \end{split} \end{equation}\]

通过对分类阈值\(\theta\)(默认0.5)从大到小或者从小到大依次取值,我们可以得到很多组TPR和FPR的值,将其在图像中依次画出就可以得到一条ROC曲线,阈值\(\theta\)取值范围为\([0, 1]\)

ROC曲线在图像上越接近左上角\((0, 1)\)模型越好,即ROC曲线下面与横轴和直线FPR = 1围成的面积(AUC值)越大越好。直观上理解,纵坐标TPR就是recall\(_{positive}\)值,横坐标FPR就是(1 - recall\(_{negative}\)),前者越大越好,后者整体越小越好,在图像上表示就是曲线越接近左上角\((0, 1)\)坐标越好。

图 1展示了3个模型的ROC曲线,要知道哪个模型更好,则需要计算每条曲线的AUC值,一般认为AUC值越大越好。AUC值由定义通过计算ROC曲线、横轴和直线FPR = 1三者围成的面积即可得到。

凡本网注明"来源:XXX "的文/图/视频等稿件,本网转载出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如涉及作品内容、版权和其它问题,请与本网联系,我们将在第一时间删除内容!
作者: wuliytTaotao
来源: https://www.cnblogs.com/wuliytTaotao/p/9285227.html