当前位置: 首页 > news >正文

【Python机器学习】4.2. 数据分离与混淆矩阵

喜欢的话别忘了点赞、收藏加关注哦(关注即可查看全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)
请添加图片描述

4.2.1. 数据分离

我们在上一篇文章讲到了过拟合的问题——过拟合能使训练数据的准确率更高,但是却失去了通用性,这也就回归到了机器学习的本质:

机器学习的本质是用训练数据来更好地预测新数据,而不是保证训练数据的准确性尽可能高。

那如果我没有新数据呢?这时候就得从训练数据里剥离出一部分作为训练数据、一部分作为测试数据。这就是数据分离。

具体来说分为以下几步:

  • 把数据分为训练集(一般来说70%)和测试集(一般来说30%)
  • 使用训练集进行模型训练
  • 使用测试集进行预测,评估表现

举个例子,假如我们有以下数据:

特征1特征2结果
122
3412
5630
7856
91090

大致分成:

数据类型特征1特征2结果
训练数据122
训练数据3412
训练数据7856
测试数据5630
测试数据91090

其实我们在 3.5. 决策树实战 中提到过数据分离的方法:

# 划分测试集和训练集  
from sklearn.model_selection import train_test_split  
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
  • train_test_split函数可以让我们轻易地拆分数据
  • test_size=0.2告诉程序80%数据用于训练,20%用于测试
  • 其实train_test_split还有一个参数是random_state,输入不同的数据即可对训练数据进行不同的随机划分

4.2.2. 混淆矩阵(Confusion Matrix)

使用准确率评估模型的缺点

我们先来看看使用准确率来评估模型的例子:

假如说有1000个数据,其中900个是1,100个是0。然后这里有两个模型的预测结果:

  • 模型1:850个1,150个0,准确率90%
  • 模型2:所有结果都是1(1000个1),准确率90%

模型1和2有相同的准确率,但是明显模型2的预测是无效的,我们把这种称为空准确率。

准确率可以方便的用于衡量模型的整体预测效果,但无法反应细节信息,具体表现在:

  • 没有体现数据预测的实际分布情况(0、1本身的分布比例)
  • 没有体现模型错误预测的类型

混淆矩阵的定义

混淆矩阵,又称为误差矩阵,用于衡量分类算法的准确程度。

实际\预测01
0True Negative (TN)False Positive (FP)
1False Negative (FN)True Positive (TP)
  • True Positives (TP):预测准确、实际为正样本的数量(实际为1,预测为1)
  • True Negatives (TN):预测准确、实际为负样本的数量(实际为0,预测为0)
  • False Positives (FP):预测错误、实际为负样本的数量(实际为0,预测为1)
  • False Negatives (FN):预测错误、实际为正样本的数量(实际为1,预测为0)

通过混淆矩阵,我们可以计算更多的指标来评估模型:

指标公式定义
准确率 (Accuracy)TP+TNTP+TN+FP+FN\frac{TP + TN}{TP + TN + FP + FN}TP+TN+FP+FNTP+TN总样本中,预测正确的比例
误差率 (Misclassification Rate)FP+FNTP+TN+FP+FN\frac{FP + FN}{TP + TN + FP + FN}TP+TN+FP+FNFP+FN总样本中,预测错误的比例
召回率 (Recall)TPTP+FN\frac{TP}{TP + FN}TP+FNTP正样本中,预测正确的比例
特异度 (Specificity)TNTN+FP\frac{TN}{TN + FP}TN+FPTN负样本中,预测正确的比例
精确率 (Precision)TPTP+FP\frac{TP}{TP + FP}TP+FPTP预测结果为正的样本中,预测正确的比例
F1 分数 (F1 Score)2×Precision×RecallPrecision+Recall\frac{2 \times Precision \times Recall}{Precision + Recall}Precision+Recall2×Precision×Recall综合 Precision 和 Recall 的指标

混淆矩阵的优点

  • 分类任务中,相比单一的预测准确率,混淆矩阵提供了更全面的模型评估信息(TP\TN\FP\FN)
  • 通过混淆矩阵,我们可以计算出多样的模型表现衡量指标,从而更好地选择模型

哪个指标更关键?

衡量指标的选择取决于应用场景:

  • 垃圾邮件检测(正样本为“垃圾邮件“):希望普通邮件(负样本)不要被判断为垃圾邮件(正样本),即:判断为垃圾邮件的样本都是判断正确的,需要关注精确率;还希望所有的垃圾邮件尽可能被判断出来,需要关注召回率
  • 异常交易检测(正样本为“异常交易”):希望判断为正常的交易(负样本)中尽可能不存在异常交易,还需要关注特异度

混淆矩阵代码

sklearn中提供了confusion_matrix来进行混淆矩阵的计算:

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_test_predict)
TP = cm[1,1]
TN = cm[0,0]
FP = cm[0,1]
FN = cm[1,0]
  • TP指True Positive:预测准确、实际为正样本的数量(实际为1,预测为1)
  • TN指True Negative:预测准确、实际为负样本的数量(实际为0,预测为0)
  • FP指False Positive:预测错误、实际为负样本的数量(实际为0,预测为1)
  • FN指False Negative:预测错误、实际为正样本的数量(实际为1,预测为0)

除此之外,我们还可以计算基于混淆矩阵的各项指标:

recall = TP / (TP + FN)
specificity = TN / (TN + FP)
precision = TP / (TP + FP)
f1 = 2 * precision * recall / (precision + recall)
  • recall是回报率:正样本中,预测正确的比例
  • specificity是特异度:负样本中,预测正确的比例
  • precision是精确率:预测结果为正的样本中,预测正确的比例
  • f1是F1分数:综合 Precision 和 Recall 的指标
http://www.dtcms.com/a/296067.html

相关文章:

  • 在原生Android项目中集成React Native实践
  • 《面向互联网2C业务的分布式类Manus Java框架》系统解析
  • YOLO11有效涨点优化:注意力魔改 | 新颖的多尺度卷积注意力(MSCA),即插即用,助力小目标检测
  • Java与NLP实战:文本处理到情感分析全解析
  • 基于Node.js开发的开源博客平台ghost安装和使用
  • 【科研绘图系列】R语言绘制双侧坐标轴的条形图
  • Java并发编程第六篇(AQS设计理念与源码解析)
  • TechGPT3部署
  • kafka的shell操作
  • 【Atlassian生态】Jira Cloud单站点现可支持10万用户:架构升级与龙智云迁移服务
  • 【C++造轮子】手撕list容器:从零实现STL链表架构
  • FFT算法实现之fft IP核
  • 无人机抛投模块分析
  • 基于 AI 的 Markdown 笔记应用HelloGitHub 评分
  • Springmvc的自动解管理
  • 开源项目XBuilder前端框架
  • 零知识证明
  • 物流仓储自动化升级:Modbus TCP与DeviceNet的协议融合实践
  • Git 下载
  • 三维手眼标定
  • 车规级CANFD芯片在汽车车身控制方案中的应用解析
  • 雨季,汽车经常跑山区,该如何保养?
  • 汽车需求管理的关键要素及适合汽车行业的最佳需求管理解决方案Jama Connect
  • 【世纪龙科技】大众车身电气技术仿真教学软件-赋能汽车电气教学
  • 格雷希尔快速封堵头,针对新能源汽车冷却系统进出水口快速封堵的解决方案特点及应用分析
  • 高亮标题里的某个关键字正则表达式
  • c#正则表达式
  • Q2桥门式起重机司机主要应用在哪些行业
  • Etcd原理基础学习
  • Java基础day16-Vector类-Stack类-Collection子接口Set接口