对模型评估中的准确率、精准率和召回率描述与理解

Python 同时被 2 个专栏收录
50 篇文章 1 订阅
27 篇文章 0 订阅

在机器学习、深度学习中,我们在做分类任务时,经常需要对模型结果进行评估。其中用于评估的指标就有准确率、精准率和召回率,这些指标都是通过预测概率来获得的。以下就来介绍这些指标代表什么。我们先来看看下面这张图:

其中,如上图混淆矩阵所示。

  • TP:样本为正,预测结果为正;
  • FP:样本为负,预测结果为正;
  • TN:样本为负,预测结果为负;
  • FN:样本为正,预测结果为负。

准确率、精准率和召回率的计算公式如下:

准确率(accuracy): (TP + TN )/( TP + FP + TN + FN)。准确率就是准确程度,通过正确数/总数得到。

精准率(precision):TP / (TP + FP),正确预测为正占全部预测为正的比例。

召回率(recall): TP / (TP + FN),正确预测为正占全部正样本的比例,我们可以理解为找到的数目与总的需要我们找到的数目的比。

我们当然希望精准率和召回率都高,但是在现实当中一般不是这样的,很难将两者变成很高的数值。事实上这两者是相互拉扯的关系,相互制约。比如极端情况下,我们只搜索出了一个结果,且是准确的,那么Precision就是100%,但是Recall就很低;而如果我们把所有结果都返回,那么比如Recall是100%,但是Precision就会很低。

补充:

上文曾经提到混淆矩阵,那么在文末我们就简单介绍一下什么是混淆矩阵。

混淆矩阵,也叫做误差矩阵。在监督学习中,叫做混淆矩阵;而在无监督学习中叫做匹配矩阵。在评估模型的性能当中,一般会分为四个部分,如上文所示:TP,FP,TN,FN,用这些来表示模型。但是也有用n行n列的矩阵形式来表示。具体评价指标有总体精度、制图精度、用户精度等,这些精度指标从不同的侧面反映了图像分类的精度。 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

np.random.seed(37)

y_true = [1, 0, 0, 2, 1, 0, 3, 3, 3]
y_pred = [1, 1, 0, 2, 1 ,0, 1, 3, 3]

from sklearn.metrics import confusion_matrix
confusion_mat = confusion_matrix(y_true, y_pred)
print(confusion_mat)


def plot_confusion_matrix(confusion_mat):
    plt.imshow(confusion_mat, interpolation='nearest', cmap = plt.cm.gray)
    plt.title('confusion matrix')
    plt.colorbar()
    tick_marks = np.arange(confusion_mat.shape[0])
    plt.xticks(tick_marks, tick_marks)
    plt.yticks(tick_marks, tick_marks)
    plt.ylabel('true')
    plt.xlabel('predict')
    plt.show()
    
plot_confusion_matrix(confusion_mat)

在sklearn库中也有方法可以直接使用来获取召回率,精确率。在上述的程序基础上加入,以下代码段,就可以很直观地得出精确率,召回率等数值了。

from sklearn.metrics import classification_report
target_names = ['0', '1', '2', '3']
print(classification_report(y_true, y_pred, target_names=target_names))

以上内容如有错误,欢迎指出。谢谢!

  • 1
    点赞
  • 0
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值