当前位置: 首页 > 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.lryc.cn/news/598521.html

相关文章:

  • 【XGBoost】两个单任务的模型 MAP - Charting Student Math Misunderstandings
  • 位置编码(position embedding)
  • 前端学习日记(十二)
  • pytest中使用skip跳过某个函数
  • 【Rust线程】Rust高并发编程之线程原理解析与应用实战
  • Postgresql数据库Java中mybatis问题记录
  • 基于PLC控制技术的电气设备系统优化设计
  • 三维空间刚体运动
  • uniapp中mp-html使用方法
  • 第三章:掌握 Redis 存储与获取数据的核心命令
  • 机器翻译编程
  • Web前端:JavaScript some()迭代方法
  • Centos新增磁盘,进行根目录扩容
  • Redis数据库入门教程
  • 深入UniApp X:掌握复杂列表与全局状态管理的艺术
  • J2EE模式---组合实体模式
  • mujoco playground
  • Android Activity与Fragment生命周期变化
  • iOS 抓包工具有哪些?按能力划分的实用推荐与使用心得
  • list 介绍 及 底层
  • 在线工具+网页平台来学习和操作Python与Excel相关技能
  • 无广告终端安全产品推荐:打造纯净办公环境的安全之选
  • 网络安全入门第一课:信息收集实战手册(2)
  • 计算机网络知识点总结 (2)
  • OSS存储视频播放报错问题排查与解决
  • 洛谷 P1996 约瑟夫问题之题解
  • imx6ull-系统移植篇21——Linux 内核移植(下)
  • 红队视角:实战渗透测试中漏洞利用的进阶技巧与防御
  • 回调后门 函数
  • 【科研绘图系列】R语言绘制双侧坐标轴的条形图