机器学习之混淆矩阵 confusion_matrix
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相关推荐
- [Python+sklearn] 计算混淆矩阵 confusion_matrix()函数
python sklearn 计算混淆矩阵 confusion_matrix()函数 参考sklearn官方文档:sklearn.metrics.confusion_matrix. 功能: 计算混淆矩 ...
- python 怎么调用 矩阵 第几行_第58集 python机器学习:混淆矩阵精度指标
混淆矩阵的精度计算公式为:精度=(TP+TN)/(TP+TN+FP+FN),也就是说,精度就是指正确的预测数目除以所有样本的数量. 准确率.召回率与f-分数:总结混淆矩阵还有几种方法,其中最常见的就是 ...
- 【机器学习】混淆矩阵详细介绍(代码+含义+解释)
文章目录一瞥 图形介绍 重要概念 混淆矩阵延伸出的各个评价指标 关键术语 图形介绍 同样的道理,这里我们采用recall来计算模型的好坏,也就是说那些异常的样本我们的检测到了多少,这也是咱们最初的目的 ...
- 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 ...
- python混淆矩阵,详解使用python绘制混淆矩阵(confusion_matrix)
这篇文章主要介绍了详解使用python绘制混淆矩阵(confusion_matrix),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学 ...
- python 混淆矩阵_绘制混沌矩阵
python因为有各种库的支持,所以功能格外强大.在可视化方面,目前用得较多的是matplotlib.在基于matplotlib.pyplot画带色标(colorbar)的图时候,往往为了美观和科研用 ...
- Python绘图制作混淆矩阵图--简易版(改矩阵参数就能运行)
#confusion_matrix import numpy as np import matplotlib.pyplot as plt # classes = ['A','B','C','D','E ...
- 医学图像多分类的评价指标(包括混淆矩阵,metrics.classification_report等)
最近在做一个四分类的医学图像分类,记录下到处凑来的分类效果评价指标吧: y_true,y_pred,outProb 都是列表 发现了一个问题:metrics.classification_report ...
- 混淆矩阵评价指标_机器学习:模型训练和评估——分类效果的评价
图 | 源网络文 | 5号程序员 分类模型建立好后,这个模型到底符不符合要求要怎么评判呢? 事实上是有评价标准的. 要评价模型在测试集上预测结果的好坏,可以使用Sklearn库中的metrics模块方 ...
- 混淆矩阵评价指标_机器学习模型评价指标 -- 混淆矩阵
机器学习模型评价指标 – 混淆矩阵 在机器学习领域中,混淆矩阵(confusion matrix)是一种评价分类模型好坏的形象化展示工具.其中,矩阵的每一列表示的是模型预测的样本情况:矩阵的每一行表示 ...
最新文章
- linux 中FTP服务器的架设
- php.ini网站空白,php配置问题:拷贝php.ini后,测试页面无法显示(显示空白)
- Httprunner生成Allure格式HTML报告
- [转]程序员趣味读物:谈谈Unicode编码
- 我终于拿到CMU的offer了!
- 第一章:渗透测试之信息搜集
- pytest测试实战pdf_Pytest测试实战
- CAS 乐观锁和ABA问题
- 一行行地读取输入行,将把最长的行打印出来
- VS2013 安装配置 C++ boost 库
- BZOJ 1597 [Usaco2008 Mar]土地购买 (斜率优化dp)
- 前端页面,引入PingFang SC(苹方简)字体
- 生成对抗网络(GAN)教程 - 多图详解
- 中国火炬统计数据 2008-2021年
- 计算机的系统更新速度,Windows 10更新后变慢了?5种方法解决Windows变慢问题
- 域名抢注哪个通道成功率高?价格贵不贵?
- ES7和 ES8 一览
- 猿辅导python编程课网课怎么样_猿辅导网课怎么样 靠谱吗
- vim比较目录diff
- 如何在WINDOWS下使用ZIP命令