【python】scikit-learn包:模型评估与优化

news2025/1/14 4:09:40

模型构建的目的

首先明确,模型拟合的目的:
不是对训练数据进行准确预测,而是对新数据进行准确预测

欠拟合 与 过拟合

在这里插入图片描述
欠拟合:可以通过训练数据及时发现,且可通过优化模型结果解决
过拟合:难以发觉;

过拟合的原因与解决

过拟合原因

本质原因: 对训练数据的拟合过于准确,忽略了训练数据也可能存在的误差
模型上的原因
1. 模型过于复杂(维度过高)
2. 把过多的属性参考在内,产生了干扰

过拟合解决思路

解决
1. 简化模型结构(使用低阶模型)
2. 数据预处理(降维处理,PCA主成分分析)
3. 模型训练时,增加正则化项

法一:要素降维——PCA主成分分析

详见:【python】sikit-learn包:机器学习

法二:增加正则项

普通拟合时,损失函数如下:
在这里插入图片描述
其中 g(Θ,xi) 可以理解为 :
在这里插入图片描述

添加正则项后的损失函数如下:
在这里插入图片描述
可以通过抬高 λ 的值,控制 Θ 的值在较小范围内,从而降低高阶自变量对因变量的影响

模型评估方法——数据分离 & 混淆矩阵

什么是数据分离?

由模型构建目的 => 我们要想评估模型,我们在具有“训练数据”的同时,还需要“新数据”,并且知道“新数据”的正确结果
=> 所以我们需要将我们已有数据进行分离,
分成:训练集测试集
训练集用于模型训练,测试集用于预测
训练集和测试集的比例可以不断调整

数据分离的代码实现

from sklearn.model_selection import train_test_split
Xtrain,Xtest,y_train,y_test=train_test_split(X,y,random_state=4,test_size=0.4)
# x与y为一一对应关系,随机状态为4,测试数据的占全部数据的比例为0.4

准确率评估的局限性:

传统模型评估方法:直接计算准确率 accuracy
局限性例子
对0-1数据进行预测,被预测数据中有900个1和100个0

模型1:猜对850个1和50个0,其余猜错,准确率90%
模型2:全部猜测为1,准确率为90%

显然,模型2不靠谱,但它具备和模型1一样的准确率
准确率具有局限性的原因
reason1: 没有体现数据预测的实际分布情况(0和1的分布比例等)
reason2: 没有体现模型错误预判的类型(因为什么错了)

混淆矩阵

定义

混淆矩阵又叫误差矩阵,用来衡量分类算法的准确程度
在这里插入图片描述
在这里插入图片描述
混淆矩阵的评估要素
在这里插入图片描述
混淆矩阵可以提供更加全面的评估信息
可以将混淆矩阵所包含的各种率都进行观察,即可得知该模型的具体情况;哪个指标更重要,取决于模型使用的环境
F1分数 越高,模拟

混淆矩阵的代码实现

from sklearn.metrics import confusion matrix
cm = confusion_matrix(y,pred_y)
TP = cm[1,1] #正样本猜对
TN = cm[0,0] #正样本猜错
FP = cm[0,1] #负样本猜对
FN = cm[1,0] #负样本猜错
recall = TP/(TP+FN) #召回率,正样本的猜对率
specificity = TN/(TN+FP) #特异度,负样本的猜对率
precision = TP/(TP+FP) # 精确率 预测为正样本的正确率
f1 = 2*precision*recall / (precision +recall) #F1分数,综合精确度和召回率的指标

模型优化方法

数据质量决定模型表现的上限

思路:

  1. 数据属性的意义,是否为无关数据
  2. 不同属性数据的数量级差异
  3. 是否有异常数据
  4. 采集数据的方法是否合理,采集到的数据是否有代表性
  5. 数据标签映射编码 的结果具有一致性

方法:

  1. 删除无关属性的数据
  2. 数据预处理:整合、规范、标准、归一
  3. 异常数据 是否保留或过滤
  4. 尝试多种模型,对比模型表现

模型优化 的 思路框架

Step 1. 观察原始数据(数据内容、数据范围等)
Step 2. 数据格式整理(标签编码、数据类型转换等)
Step 3. 筛出异常数据【异常检测算法】(决定是否保留)
Step 4. 删除低相关属性【PCA主成分分析算法】(提高模型效率)
Step 5. 尝试不同的模型
Step 6. 对不同模型的表现进行评价【混淆矩阵评估法】
Step 6. 模型优化【调整模型参数、正则化处理】

进一步优化方法

  1. 遍历模型的核心参数的组合,评估模型表现
  2. 扩大数据样本量
  3. 增减属性数据
  4. 模型正则化处理,调整正则项λ的值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/471187.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang基础----基于Goland编辑器快速体验Golang

【原文链接】Golang基础----基于Goland编辑器快速体验Golang (1)打开Goland,点击“New Project” (2)设置项目存放位置以及项目名,然后点击“Add SDK”,然后点击“Local” (3&a…

vue3 的router跳转 - 页面同tab跳转和打开新tab跳转

vue3 的router跳转 - 页面同tab跳转和打开新tab跳转 vue3的路由基本知识 当前页需要的方法 主要是获得Vue Router实例暴露的一些方法,使用这些方法,进行路由操作引入 import { useRouter } from vue-router;调用 const router useRouter();目标页需…

Android jetpack Compose之约束布局

概述 我们都知道ConstraintLayout在构建嵌套层级复杂的视图界面时可以有效降低视图树的高度,使视图树扁平化,约束布局在测量布局耗时上比传统的相对布局具有更好的性能,并且约束布局可以根据百分比自适应各种尺寸的终端设备。因为约束布局确…

simulink simscape传感总结

1. 传感模块概述2. 可观测的传感量3. 传感模块3.1 运动传感模块3.1.1 旋转和平移细分旋转平移 3.2 力传感模块3.2.1 关节力和力矩细分 1. 传感模块概述 Simscape提供传感模块,通过改变模型的输入和输出,可以进行许多分析,比如可以进行机械臂…

中移链控制台对接4A平台功能验证介绍

中移链控制台具备单独的注册登录页面,用户可通过页面注册或者用户管理功能模块进行添加用户,通过个人中心功能模块进行用户信息的修改和密码修改等操作,因业务要求,需要对中移链控制台的用户账号进行集中管理,统一由 4…

2 文件IO

2.1 文件描述符 对于内核而言,所有打开文件都由文件描述符引用。文件描述符是一个非负整数。当打开 一个现存文件或创建一个新文件时,内核向进程返回一个文件描述符。当读、写一个文件时, 用open或creat返回的文件描述符标识该文件&#xff0…

QT 网络编程之主机信息查询(QHostInfo 和 QNetworkInterface类)简介

Qt 网络模块提供了用于编写 TCP/IP 客户端和服务器端程序的各种类,如用于 TCP 通信的QTcpSocket 和 QTcpServer,用于 UDP 通信的 QUdpSocket,还有用于实现 HTTP、FTP 等普通网络协议的高级类如 QNetworkRequest,QNetworkReply 和Q…

【Redis】Redis中的5种基础数据类型详解

文章目录 1. Redis数据结构2. 基础数据结构详解2.1 String字符串2.2 List列表2.3 Set集合2.4 Hash散列2.5 Zset有序集合 1. Redis数据结构 对于Redis来说,所有的key(键)都是字符串,我们一般所讨论的Redis基础数据类型指的是存储的…

ref在Vue2、Vue3中的使用

文章目录 前言一、ref在Vue2中的用法二、ref在Vue3中的用法 前言 记录一下ref在Vue2与Vue3中的使用,ref可以获取DOM元素,也可以获取子组件的数据、方法。 一、ref在Vue2中的用法 给元素绑定一个ref,然后在js中通过this.$refs获取DOM。 ref命…

@PostConstruct注解和@PreDestroy注解

前言 Bean注解指定初始化和销毁的方法,也介绍了使用InitializingBean和DisposableBean来处理bean的初始化和销毁。JDK中还提供了两个注解能够在bean创建完成并且属性赋值完成之后执行一些初始化工作和在容器销毁bean之前通知我们进行一些清理工作。 1.PostConstru…

java 获取当前线程的方法

我们知道,线程是程序运行的基本单元,是程序中各进程之间通信的桥梁,一个线程的创建和销毁直接影响整个程序的运行效率。 我们在 Java中经常使用 Runnable接口来获取当前线程,获取线程的主要目的就是为了快速地启动进程。但是&…

一键导出ChatGPT聊天记录:让备份更简单

重要性: 备份ChatGPT的聊天记录同样非常重要,因为这些记录可能包含了您与ChatGPT的交互记录,这些记录可能包含了您的个人信息、兴趣爱好、偏好和其他敏感信息。以下是备份ChatGPT聊天记录的一些重要性: 防止数据丢失:…

FT2000+ qemu kvm 64C64G 通过频繁设置CPU online 状态导致虚拟机红旗操作系统假死测试用例

宿主机配置 虚拟机配置文件 <domain typekvm> //如果是Xen&#xff0c;则type‘xen’<name>redflag1</name> //虚拟机名称&#xff0c;同一物理机唯一<uuid>44748c15-7c00-4817-8724-675a27c3f821</uuid> //同一物理机唯一&#xff0c;可用uu…

北京 Meetup 预告 | 内含六个话题,满满干货,期待见面!

在春之末尾&#xff0c;夏之开始的5月&#xff0c;响应社区小伙伴们的呼唤&#xff0c;我们泽拓科技将在北京举办线下社区技术交流活动。 此次我们泽拓科技邀请了去哪儿网、ScaleFlux、美团、SphereEx的相关资深专家来分享他们的数据库探索与实践。我们真诚邀请数据库技术社区…

Day3_Springboot框架搭建

前面两天介绍了vue前端的主体框架&#xff0c;并完成了相关页面的部分设置&#xff0c;接下来开始介绍springboot后端开发的过程&#xff0c;手把手实践。包括项目的初始构建以及集成mybatis、mybatis-plus实现增删改查&#xff0c;分页查询&#xff0c;集成swagger-ui测试&…

Spring(4) Spring是如何使用三级缓存来解决循环依赖问题?

目录 1.什么是循环依赖&#xff1f;2.什么是Spring的循环依赖&#xff1f;3.三级缓存解决循环依赖3.1 假如只使用一级缓存3.2 假如使用二级缓存3.3 为什么要使用三级缓存 4.三级缓存解决循环依赖的局限性 1.什么是循环依赖&#xff1f; 假设我们有两个类 A 和 B&#xff0c;类…

【Docker】1、认识 Docker 和安装 Docker

目录 零、项目部署问题一、Docker 简介二、Docker 和虚拟机三、镜像和容器四、Docker 架构五、CentOS7 上安装 Docker(1) 卸载曾经安装过的 Docker(2) 安装 Docker(3) 启动 Docker(4) 启动、关闭、重启 Docker 六、配置 Docker 镜像国内仓库 零、项目部署问题 大型项目组件较多…

爬虫(requsets)笔记

1、request_基本使用 pip install requests -i https://pypi.douban.com/simple 一个类型六个属性 r.text 获取网站源码 r.encoding 访问或定制编码方式r.url 获取请求的urlr.content 响应的字节类型r.status_code 响应的状态码r.headers 响应的头信息 import requestsurl…

VS2022汇编环境搭建

VS2022汇编环境搭建 使用VS2022搭建汇编语言运行环境Step 1 安装VS2022Step 2 创建项目 使用VS2022搭建汇编语言运行环境 使用Visual Studio 2022 搭建汇编语言项目&#xff0c;运行汇编语言代码。 Step 1 安装VS2022 自行到官网下载安装&#xff0c;选择C编程环境。 Step…

【RabbitMQ】| Lion带你 (超详细) 从0到1使用SpringBoot操作RabbitMQ

目录 一. &#x1f981; 前言二. &#x1f981; SpringBoot操作RabbitMQⅠ. 前期准备工作1. 创建项目&#xff08;不细说&#xff09;2. 添加依赖3. 编写配置文件 Ⅱ. 创建队列和交换机Ⅲ. 创建生产者Ⅳ. 创建消费者 三. &#x1f981; 总结 一. &#x1f981; 前言 Spring Bo…