当前位置:主页 > python教程 > Python sklearn预测评估混淆矩阵

Python sklearn预测评估指标混淆矩阵计算示例详解

发布:2023-04-09 08:25:01 59


本站收集了一篇相关的编程文章,网友能飞鸾根据主题投稿了本篇教程内容,涉及到Python、sklearn预测评估混淆矩阵、Python、sklearn、混淆矩阵计算、Python sklearn预测评估混淆矩阵相关内容,已被209网友关注,下面的电子资料对本篇知识点有更加详尽的解释。

Python sklearn预测评估混淆矩阵

前言

很多时候需要对自己模型进行性能评估,对于一些理论上面的知识我想基本不用说明太多,关于校验模型准确度的指标主要有混淆矩阵、准确率、精确率、召回率、F1 score。另外还有P-R曲线以及AUC/ROC,这些我都有写过相应的理论和具体理论过程:

机器学习:性能度量篇-Python利用鸢尾花数据绘制ROC和AUC曲线

机器学习:性能度量篇-Python利用鸢尾花数据绘制P-R曲线

 这里我们主要进行实践利用sklearn快速实现模型数据校验,完成基础指标计算。

混淆矩阵

查准率(precision)与查全率(recall)是对于需求在信息检索、Web搜索等应用评估性能度量适应度高的检测数值。对于二分类问题,可将真实类别与算法预测类别的组合划分为真正例(ture positive)、假证例(false positive)、真反例(true negative)、假反例(false negative)四种情形。显然TP+FP+TN+FN=样例总数。分类结果为混淆矩阵:

以分类模型中最简单的二分类为例,对于这种问题,我们的模型最终需要判断样本的结果是0还是1,或者说是positive还是negative。 因此,我们就能得到这样四个基础指标,我称他们是一级指标(最底层的):

  • 真实值是positive,模型认为是positive的数量(True Positive=TP)
  • 真实值是positive,模型认为是negative的数量(False Negative=FN):这就是统计学上的第二类错误(Type II Error)
  • 真实值是negative,模型认为是positive的数量(False Positive=FP):这就是统计学上的第一类错误(Type I Error)
  • 真实值是negative,模型认为是negative的数量(True Negative=TN)

预测性分类模型,肯定是希望越准越好。那么,对应到混淆矩阵中,那肯定是希望TP与TN的数量大,而FP与FN的数量小。所以当我们得到了模型的混淆矩阵后,就需要去看有多少观测值在第二、四象限对应的位置,这里的数值越多越好;反之,在第一、三象限对应位置出现的观测值肯定是越少越好。

python代码

混淆矩阵一般来说可以有三种实现展示方法,需要前置计算出混淆矩阵数据,这一点使用sklearn就可以实现:

from sklearn.metrics import confusion_matrix
y_true =df_evaluation.state_y
y_pred =df_evaluation.state_x
cm= confusion_matrix(y_true, y_pred,labels=[2,3,4,5])

其中cm就是计算出来的混淆矩阵:

利用sklearn的confusion_matrix函数就可以实现,这里将该函数的参数铺开一下:

sklearn.metrics.confusion_matrix(y_true,       y_pred,       *,       labels=None,       sample_weight=None,       normalize=None)

参数说明:

  • y_true:对比真值
  • y_pred: 预测值
  • labels:索引矩阵的标签列表。这可用于重新排序或选择标签的子集。如果给定“无”,则按排序顺序使用在y_true或y_pred中至少出现一次的值。
  • sample_weight:样本权重
  • normalize:在真(行)、预测(列)条件或所有总体上规范化混淆矩阵。如果“无”,则混淆矩阵将不会被归一化。

得到了混淆矩阵接下来进行数据可视化就好了,这里有三种实现形式,其中matplotlib和seaborn实现方法是一样的,都是热力图实现,另外sklearn自带一个ConfusionMatrixDisplay也可以直接实现热力。 第一种matplotlib/seaborn:

import seaborn as sns
import matplotlib.pyplot as plt
labels=[2,3,4,5]
sns.heatmap(cm,annot=True ,fmt="d",xticklabels=labels,yticklabels=labels)
plt.title('confusion matrix')  # 标题
plt.xlabel('Predict lable')  # x轴
plt.ylabel('True lable')  # y轴
plt.show()

第二种ConfusionMatrixDisplay:

disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=labels)
disp.plot(
    include_values=True,            
    cmap="viridis",                 
    ax=None,                        
    xticks_rotation="horizontal",   
    values_format="d"               
)
plt.show()

这里我主要将一下ConfusionMatrixDisplay.plot()的可选参数:

plot(*, 
     include_values=True, 
     cmap='viridis', 
     xticks_rotation='horizontal', 
     values_format=None, 
     ax=None, 
     colorbar=True, 
     im_kw=None, 
     text_kw=None)

参数说明:

  • include_values:bool,default=True。包括混淆矩阵中的值。
  • cmap:str or matplotlib Colormap, default=’viridis’。matplotlib识别的颜色映射。
  • xticks_rotation: {‘vertical’, ‘horizontal’} or float, default=’horizontal’。旋转xtick标签。
  • values_format:str, default=None。混淆矩阵中值的格式规范。如果无,则格式规范为“d”或“.2g”,以较短者为准。
  • ax: matplotlib axes, default=None。要绘制的轴对象。如果为“无”,则创建新的图形和轴。
  • colorbar:bool, default=True。是否向绘图添加色条。
  • im_kw:dict, default=None。使用传递给matplotlib.pyplot.imshow调用的关键字进行读写。
  • text_kw:dict, default=None。使用传递给matplotlib.pyplot.text调用的关键字进行读写。

以上就是Python sklearn预测评估指标混淆矩阵计算示例详解的详细内容,更多关于Python sklearn预测评估混淆矩阵的资料请关注码农之家其它相关文章!


参考资料

相关文章

  • Python用try except处理程序异常的三种方法总结

    发布:2019-06-08

    这篇文章主要介绍了Python使用try except处理程序异常的三种常用方法,结合实例形式分析了Python基于try except语句针对异常的捕获、查看、回溯等相关操作技巧,需要的朋友可以参考下


  • python制作websocket服务器实例分享

    python制作websocket服务器实例分享

    发布:2023-01-24

    给网友朋友们带来一篇关于python的教程,websocket是一个浏览器和服务器通信的新的协议,websocket则和一般的socket一样,使得浏览器和服务器建立了一个双工的通道。今天我们就来详细探讨下使用Python实现websocket服务器的具体方法


  • 详解python利用Opencv实现人脸识别功能

    发布:2020-02-21

    这篇文章主要为大家详细介绍了python利用Opencv实现人脸识别功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • Python脚本的调试和分析实例讲解

    发布:2020-05-05

    ​本篇文章给大家带来的内容是关于Python脚本的调试和分析(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。


  • Python批量删除txt文本指定行的思路与代码

    发布:2023-04-17

    在深度学习项目中常常会处理各种数据集,下面这篇文章主要给大家介绍了关于Python批量删除txt文本指定行的思路与代码,文中通过实例代码介绍的非常详细,需要的朋友可以参考下


  • Python eval()与exec()函数使用介绍

    发布:2023-04-26

    exec函数执行的是python语句,没有返回值,eval函数执行的是python表达式,有返回值,exec函数和eval函数都可以传入命名空间作为参数,本文给大家介绍下Python eval()和exec()函数,感兴趣的朋友跟随小编一起看看吧


  • python字典set方法的特殊方法

    发布:2019-11-19

    python字典有set方法,set跟dict一样是key的集合,不可重复;创建一个set集合,需要提供一个list作为输入集合;不可存储可变的数据类型作为key值,内部存储原理跟dict一样,只是没有value罢了 。


  • Python之dict(或对象)与json之间的互相转化实例

    发布:2022-11-24

    为网友们分享了关于Python的教程,今天小编就为大家分享一篇Python之dict(或对象)与json之间的互相转化实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


网友讨论