1.这里介绍由 sklearn.metrics.ConfusionMatrixDisplay 所给出的关于混淆矩阵的一个小例子,来进行理解混淆矩阵及如何应用混淆矩阵来对数据进行分析

2.先了解混淆矩阵的一些基本信息,这里规定正类为1,负类为0

TP(True Positives): 预测为1,而真实的也为1 (即正类判断为正类,1判断为1)

TN(True Negatives): 预测为0,真实的也为0   (即负类判断为负类,0判断为0)

FP(False Positives): 预测为1,真实的为0       (即负类判断为正类,将0判断为了1)

FN(False Negatives): 预测为0,真实为1        (即正类判断为负类,将1判断为了0)

样本总数=25  预测为:0 预测为:1
真实为:0 TN = 12 FP = 1 真实的0总数:13
真实为:1 FN = 2 TP = 10 真实的1总数:12
预测的0总数:14 预测的1总数:11

上方表格中,说明一下FN = 2 ,即表示预测为0的样本总的有14个,但是其中有2个样本咱预测成了0不过其真实的情况是为1,所以得到了FN = 2,即将本来是1的预测成了0(正类预测成了负类)。

为了便于理解,还可以将1理解成患病的情况,0是没病的情况,那么上面FN=2,则可理解成,将本来是患病的2个人预测成了没病,所以自然预测出问题了,他俩本来有病,但计算机预测他俩没病。

这个预测的数据,并非人为的凭空捏造,而是通过相关模型的建立及训练后,传入相关测试数据后,得到的预测数据。

而我们会想如果预测的数据和真实的数据情况一样的情况呢,即假设咱建立的模型很牛掰,预测的很准达到了100%正确,那么TN、FP、FN、TP的取值又该如何呢?即如下表情况:我们规定其真实的0的个数和上表一样还是13个,真实的1的个数仍旧为12,然后预测情况如下:

样本总数=25  预测为:0 预测为:1
真实为:0 13 0 真实的0总数:13
真实为:1 0 12 真实的1总数:12
预测的0总数:13 预测的1总数:12

可以看到预测情况和真实的情况一样,即这种情况毫无疑问,预测准确率达到了100%,当然一般情况下,预测能力可达不到100%正确。

除上述外还需了解召回率(recall score)的相关信息,可从sklearn.metrics.recall_score 中进行了解,即使用TN、FP、FN、TP的相关值来计算的一个分数,进而评估该预测效果

3.接下来了解通过代码及运行结果来进行相关信息的理解及应用

3.1  基于SVC的方式来进行训练及预测

# 混淆矩阵 confusion matriximport matplotlib.pyplot as plt
import numpy as npfrom sklearn.datasets import make_classification
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
from sklearn.model_selection import train_test_split
from sklearn.svm import SVCfrom sklearn.metrics._classification import recall_scoreX, y = make_classification(random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y,random_state=0)print("真实的 Y值:",y_test)# SVC 方式clf = SVC(random_state=0)clf.fit(X_train, y_train)predictions = clf.predict(X_test)print("预测的 Y值:",predictions)# SVC
#Y: [1 1 1 0 0 1 1 0 1 1 1 0 0 0 0 1 0 0 1 1 0 0 1 0 0]
#p: [1 0 1 0 0 1 1 0 0 1 1 0 0 0 0 1 0 0 1 1 1 0 1 0 0]
#      x             x                       x     cm = confusion_matrix(y_test, predictions)disp = ConfusionMatrixDisplay(confusion_matrix=cm)r = recall_score(y_test,predictions,average='macro')print("\n","recall score:" , r)disp.plot()plt.show()

控制台输出:recall score = 0.8782051282051282

 混淆矩阵图像:

为了方便理解,不妨将混淆矩阵的各个模块添加上坐标,所以可以看到下图的各个模块坐标,坐标为(0,0)的模块样本数量有12个,(0,1)的有1个,(1,0)的有2个,(1,1)的有10个

首先通过对控制台输出的真实的 Y 值及预测的Y值进行分析,可以看到下图中打上红叉的地方,预测的Y值与真实值并不一样,所以可以看到混淆矩阵图上(1,0)的地方有2个,其代表的意思就是预测为0但实际为1的样本数量有2个,即 FN = 2;

又有(0,1)的模块有1个样本,即 FP = 1,表示为预测为 1但实际上是 0(将负类预测成了正类,0预测成了1);

又有(0,0)的模块为12个,即 TN = 12,表示为预测为0,真实的也为0的有12个样本(负类预测成负类,0预测成了0);

之后有(1,1)的模块为10个,即 TP = 10,表示为预测成1,真实的也为1的有10个样本(正类预测成正类,1预测成了1)。

3.2 基于逻辑回归的方式训练及预测

# 添加如下代码,且将SVC方式注释掉使用逻辑回归方式即可from sklearn.linear_model import LogisticRegression# SVC 方式
# clf = SVC(random_state=0)# 逻辑回归方式
clf = LogisticRegression(random_state=0)

可以发现recall score 分数较SVC的提高了些

可以发现对比之前的混淆矩阵,逻辑回归方式,(1,1)即 TP = 11,从TP = 10 提高到了 11,略有上升。

3.3 线性回归的方式训练及预测

# 添加线性回归的库,即调用线性回归的代码from sklearn.linear_model import LinearRegression# SVC 方式
# clf = SVC(random_state=0)# 逻辑回归方式
# clf = LogisticRegression(random_state=0)# 采用线性回归
clf = LinearRegression()clf.fit(X_train, y_train)predictions = clf.predict(X_test)predictions = predictions.astype(int)   # 将预测数据转为int类型

可以看到线性回归方式进行预测效果有些不太理想,recall score 降低了很多

从混淆矩阵来看,预测的效果,在预测为1且实际为1时的情况即TP的值下降了许多,该方式进行预测有点不太理想。

4.以上便为混淆矩阵的一些简单理解,总体来说,混淆矩阵表示相关数据情况,还是比较直观的。

机器学习之混淆矩阵 confusion_matrix相关推荐

  1. [Python+sklearn] 计算混淆矩阵 confusion_matrix()函数

    python sklearn 计算混淆矩阵 confusion_matrix()函数 参考sklearn官方文档:sklearn.metrics.confusion_matrix. 功能: 计算混淆矩 ...

  2. python 怎么调用 矩阵 第几行_第58集 python机器学习:混淆矩阵精度指标

    混淆矩阵的精度计算公式为:精度=(TP+TN)/(TP+TN+FP+FN),也就是说,精度就是指正确的预测数目除以所有样本的数量. 准确率.召回率与f-分数:总结混淆矩阵还有几种方法,其中最常见的就是 ...

  3. 【机器学习】混淆矩阵详细介绍(代码+含义+解释)

    文章目录一瞥 图形介绍 重要概念 混淆矩阵延伸出的各个评价指标 关键术语 图形介绍 同样的道理,这里我们采用recall来计算模型的好坏,也就是说那些异常的样本我们的检测到了多少,这也是咱们最初的目的 ...

  4. Python混淆矩阵(confusion_matrix)FP、FN、TP、TN、ROC,FROC,精确率(Precision),召回率(Recall),准确率(Accuracy),F1分数详述与实现

    目录 一.FP.FN.TP.TN 二.准确率(Accuracy).精确率(Precision).召回率(Recall).F1score 2.1.准确率(Accuracy) 2.2.召回率(Recall ...

  5. python混淆矩阵,详解使用python绘制混淆矩阵(confusion_matrix)

    这篇文章主要介绍了详解使用python绘制混淆矩阵(confusion_matrix),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学 ...

  6. python 混淆矩阵_绘制混沌矩阵

    python因为有各种库的支持,所以功能格外强大.在可视化方面,目前用得较多的是matplotlib.在基于matplotlib.pyplot画带色标(colorbar)的图时候,往往为了美观和科研用 ...

  7. Python绘图制作混淆矩阵图--简易版(改矩阵参数就能运行)

    #confusion_matrix import numpy as np import matplotlib.pyplot as plt # classes = ['A','B','C','D','E ...

  8. 医学图像多分类的评价指标(包括混淆矩阵,metrics.classification_report等)

    最近在做一个四分类的医学图像分类,记录下到处凑来的分类效果评价指标吧: y_true,y_pred,outProb 都是列表 发现了一个问题:metrics.classification_report ...

  9. 混淆矩阵评价指标_机器学习:模型训练和评估——分类效果的评价

    图 | 源网络文 | 5号程序员 分类模型建立好后,这个模型到底符不符合要求要怎么评判呢? 事实上是有评价标准的. 要评价模型在测试集上预测结果的好坏,可以使用Sklearn库中的metrics模块方 ...

  10. 混淆矩阵评价指标_机器学习模型评价指标 -- 混淆矩阵

    机器学习模型评价指标 – 混淆矩阵 在机器学习领域中,混淆矩阵(confusion matrix)是一种评价分类模型好坏的形象化展示工具.其中,矩阵的每一列表示的是模型预测的样本情况:矩阵的每一行表示 ...

最新文章

  1. linux 中FTP服务器的架设
  2. php.ini网站空白,php配置问题:拷贝php.ini后,测试页面无法显示(显示空白)
  3. Httprunner生成Allure格式HTML报告
  4. [转]程序员趣味读物:谈谈Unicode编码
  5. 我终于拿到CMU的offer了!
  6. 第一章:渗透测试之信息搜集
  7. pytest测试实战pdf_Pytest测试实战
  8. CAS 乐观锁和ABA问题
  9. 一行行地读取输入行,将把最长的行打印出来
  10. VS2013 安装配置 C++ boost 库
  11. BZOJ 1597 [Usaco2008 Mar]土地购买 (斜率优化dp)
  12. 前端页面,引入PingFang SC(苹方简)字体
  13. 生成对抗网络(GAN)教程 - 多图详解
  14. 中国火炬统计数据 2008-2021年
  15. 计算机的系统更新速度,Windows 10更新后变慢了?5种方法解决Windows变慢问题
  16. 域名抢注哪个通道成功率高?价格贵不贵?
  17. ES7和 ES8 一览
  18. 猿辅导python编程课网课怎么样_猿辅导网课怎么样 靠谱吗
  19. vim比较目录diff
  20. 如何在WINDOWS下使用ZIP命令

热门文章

  1. 商业融资项目计划PPT模板
  2. 所有家中常见物品的英文单词
  3. eclipse背景设置什么颜色缓解眼睛疲劳
  4. jQuery常用插件
  5. Python爬虫入门教程第七讲: 蜂鸟网图片爬取之二
  6. 一个Android沉浸式状态栏上的黑科技
  7. 【超简单】用python写给女朋友的词云
  8. 网站服务器如何直接播放视频,视频放服务器链接直接播放
  9. java char a z_java中,char A,char a的值各是多少?
  10. 关于Excel被保护的工作表忘记密码的强制解除办法