深度学习之图像回归(二)
前言
这篇文章主要是在图像回归(一)的基础上对该项目进行的优化。(一)主要是帮助迅速入门 理清一个深度学习项目的逻辑 这篇文章则主要注重在此基础上对于数据预处理和模型训练进行优化前者会通过涉及PCA主成分分析 特征选择 后者通过正则化
数据预处理
数据预处理的原因
思路链
未经过处理的原始数据存在一些问题-> 对数据进行处理 (涉及多种方法)->提升模型性能
数据可能存在的问题
-
冗余信息:数据中可能存在重复的特征或高度相关的特征,这些信息不会为模型提供额外的价值,反而会增加计算负担和过拟合的风险。
-
噪声数据:数据中可能存在错误、异常值或随机波动,这些数据点可能来源于测量失误、数据录入错误或自然噪声。
-
高重复度:某些特征或数据点可能高度相似或重复,导致模型对这些重复模式过度拟合,而无法泛化到新的数据。
-
缺失值:数据中可能存在缺失值,需要通过填充或删除等方式处理。
-
不一致性:数据可能来自不同的源,格式或单位不一致,需要进行标准化或归一化处理。
最终的目的
-
提高模型训练效率:减少特征数量和数据维度,降低计算复杂度。
-
增强模型泛化能力:去除噪声和冗余信息,使模型更专注于数据中的真实规律。
-
提升模型可解释性:减少特征数量后,模型更容易理解和解释。
数据预处理的方式
这里的几种方式就是对原始数据特征提取的方式不同 或者对
PCA主成分分析
核心:化繁为简 直击核心
是什么:
降维 用更少的维度就表现出多维数据的特征
为什么:
简化数据 去除冗余
怎么做:
步骤1:整理数据
首先,要把数据整理好,让每个特征的平均值为0。这就好比把一堆杂乱的数据“摆平”,让它们在一个统一的水平线上。这一步在数学上叫做“数据标准化”。
步骤2:找最重要的方向
接下来,PCA会找数据中最“重要”的方向。这里的“重要”是指数据变化最大的方向。想象一下,你有一堆点,PCA会找一条线,让这些点在这条线上的投影尽可能地分散。这条线就是第一个“主成分”。
步骤3:找次重要的方向
找到第一个最重要的方向后,PCA会继续找第二个最重要的方向,但这个方向要和第一个方向垂直(也就是完全独立)。这样,PCA会依次找到多个方向,每个方向都比前一个方向“重要”一点。
步骤4:简化数据
最后,PCA会把数据投影到这些最重要的方向上,得到新的特征。这些新特征就是“主成分”。因为主成分的数量通常比原始特征少,所以数据就被简化了。
def get_feature_importance_with_pca(feature_data, k=4, column=None):"""使用PCA进行特征降维,并找出对前k个主成分影响最大的原始特征。参数:feature_data (pd.DataFrame or np.ndarray): 特征数据。k (int): 选择的主成分数目,默认为4。column (list, optional): 特征名称列表。如果feature_data是DataFrame,则可以省略此参数。返回:X_new (np.ndarray): 降维后的特征数据。selected_features (list of lists): 对每个主成分影响最大的原始特征及其载荷。"""# 如果提供了列名或feature_data是DataFrame,获取列名if column is None and hasattr(feature_data, 'columns'):column = feature_data.columns.tolist()elif column is None:raise ValueError("Column names must be provided if feature_data is not a DataFrame.")# 数据标准化scaler = StandardScaler()feature_data_scaled = scaler.fit_transform(feature_data)# 应用PCApca = PCA(n_components=k)X_new = pca.fit_transform(feature_data_scaled)return X_new
载荷?
每个数据的原始特征在主成分中的重要性。比如用苹果 梨子 香蕉做一杯混合果汁 最后得到的果汁的新特征包含上述三种水果的味道和营养 这就是一个主成分 是原始特征的线性组合
载荷指的是每种水果在果汁中的贡献比例
比如
50% 苹果 + 30% 橙子 + 20% 香蕉
这里的“50%”、“30%”和“20%”就是每种水果在果汁中的“贡献比例”,在PCA中,这些比例就叫做载荷。
特征选择
是什么
假设你有一个数据集,数据集中有很多特征(比如100个特征),但并不是所有特征都对预测结果有帮助。有些特征可能是多余的,或者和目标没有关系。特征选择的目的就是从这100个特征中挑选出最有用的几个特征(比如5个或10个),让模型只用这些重要的特征来学习。
为什么
-
减少计算量:模型只需要处理少量的特征,训练速度会更快。
-
提高模型性能:去除无关特征后,模型可以更专注于重要的特征,预测效果可能会更好。
怎么办
def get_feature_importance(feature_data, label_data, k =4,column = None):model = SelectKBest(chi2, k=k) # 定义k个特征值的卡方检验得到的特征选择模型feature_data = np.array(feature_data, dtype=np.float64) # 特征值转化成浮点数 X_new = model.fit_transform(feature_data, label_data) # 用这个函数选择k个最佳特征print('x_new', X_new)scores = model.scores_ # scores即每一列与结果的相关性indices = np.argsort(scores)[::-1] # 默认小到大排序 [::-1]表示反转一个列表或者矩阵。 最终实现大到小排序 if column: # 打印k_best_features = [column[i+1] for i in indices[0:k].tolist()] # 选中这些列 打印print('k best features are: ', k_best_features)return X_new, indices[0:k] # 返回选中列的特征和他们的下标。
卡方检验
适用场景:
①非负。卡方检验基于频率分布,计算的是观测频数与期望频数之间的差异。因此,它要求输入特征必须是非负的,例如布尔值(0或1)或频率计数
②离散特征。对于连续的需要先进行离散化处理。
③简单易用 快速筛选
λ的设置
- λ 过大 → 模型欠拟合(训练和验证损失都很高)
- \lambdaλ 过小 → 可能过拟合(训练损失低但验证损失高)
- \lambdaλ 适中 → 平衡拟合与泛化
正则化的影响路径
- 正向传播:损失值=预测误差 + 0.00075×所有权重平方和
- 反向传播:梯度=原始梯度 + 2×0.00075×权重 → 权重会自动变小
- 物理意义:强制让模型参数趋向于较小的值,抑制模型复杂度
模型训练的优化
模型复杂度的体现
在机器学习中,模型复杂度通常指的是模型的参数数量和参数的大小。一个复杂的模型可能具有以下特点:
-
参数数量多:模型中有大量的参数,例如深度神经网络中的权重和偏置。
-
参数值大:模型的参数值(权重)可能很大,这意味着模型对输入特征的响应非常敏感。
复杂模型虽然能够很好地拟合训练数据(甚至可以完美拟合),但往往会过拟合,即在训练数据上表现很好,但在新的、未见过的数据上表现不佳。这是因为复杂模型可能会学习到训练数据中的噪声和细节,而不是数据的真实规律。
为什么要限制模型复杂度
限制模型复杂度的主要目的是提高模型的泛化能力,即让模型在新的、未见过的数据上表现更好。具体原因包括:
-
防止过拟合:复杂模型容易过拟合,因为它们可以学习到训练数据中的噪声和细节。通过限制复杂度,模型更倾向于学习数据的基本规律,而不是噪声。
-
简化模型:减少模型的参数数量或参数大小,可以使模型更简洁、更易于解释。这也有助于减少计算成本和训练时间。
-
提高稳定性:限制复杂度可以减少模型对输入数据的敏感性,使其在面对小的扰动时更加稳定。
如何限制模型复杂度
通过正则化项对损失函数进行约束
原始的损失函数计算
def mseLoss(pred, target, model):loss = nn.MSELoss(reduction='mean') # 计算loss函数regularization_loss = 0 # 正则项for param in model.parameters():# regularization_loss += torch.sum(abs(param)) # 参数的绝对值之和 L1正则项regularization_loss += torch.sum(param ** 2) # 计算所有参数平方 L2正则项return loss(pred, target) + 0.00075 * regularization_loss # 返回损失。
常见的正则化方法
-
L1正则化(Lasso):
-
在损失函数中添加参数的绝对值之和作为惩罚项。
-
公式:Lossnew=Loss+λ∑i∣wi∣
-
作用:L1正则化会促使某些参数变为零,从而实现稀疏性(即自动特征选择)。
-
直观理解:通过惩罚参数的绝对值,强迫模型丢弃一些不重要的特征。
-
-
L2正则化(Ridge):
-
在损失函数中添加参数的平方和作为惩罚项。
-
公式:Lossnew=Loss+λ∑iwi2
-
作用:L2正则化会使得所有参数的值变得更小(但不会变为零),从而减少模型对每个特征的依赖。
-
直观理解:通过惩罚参数的平方,限制参数的大小,使模型更“平滑”。
-
-
Dropout:
-
在训练过程中随机丢弃部分神经元的输出。
-
作用:防止神经元之间的共适应性,减少模型对某些特定输入的依赖,从而提高泛化能力。
-
-
Early Stopping:
-
在训练过程中监控模型在验证集上的性能,当性能不再提升时停止训练。
-
作用:防止模型过度拟合训练数据
-
相关文章:

深度学习之图像回归(二)
前言 这篇文章主要是在图像回归(一)的基础上对该项目进行的优化。(一)主要是帮助迅速入门 理清一个深度学习项目的逻辑 这篇文章则主要注重在此基础上对于数据预处理和模型训练进行优化前者会通过涉及PCA主成分分析 特征选择 后…...

深入理解HttpSecurity的设计
一、HttpSecurity的应用 在前章节的介绍中我们讲解了基于配置文件的使用方式,也就是如下的使用。 也就是在配置文件中通过 security:http 等标签来定义了认证需要的相关信息,但是在SpringBoot项目中,我们慢慢脱离了xml配置文件的方式,在SpringSecurity中提供了HttpSecurity…...

15增减字符串匹配(贪心)思路解析+源码
文章目录 题目[](https://leetcode.cn/problems/di-string-match/)算法原理贪心证明源码总结题目 假设s="I D I D"也就是增降增降,在0-4中,每两个数存在这种方式数组为【1, 3,2, 4,0】;(如下图) 算法原理 解法:贪心 1.当遇到“I”:选择当前最小的那个数 2…...

Java NIO与传统IO性能对比分析
Java NIO与传统IO性能对比分析 在Java中,I/O(输入输出)操作是开发中最常见的任务之一。传统的I/O方式基于阻塞模型,而Java NIO(New I/O)引入了非阻塞和基于通道(Channel)和缓冲区&a…...
14.7 LangChain Experimental 模块解析:解锁 Auto-GPT 开发新范式
LangChain Experimental 模块解析:解锁 Auto-GPT 开发新范式 关键词:LangChain Experimental、Auto-GPT 实现、自主智能体开发、Agent 架构设计、实验性功能实践 1. LangChain Experimental 模块的定位与核心能力 模块定位解析: #mermaid-svg-4xz2OlZBUFjkBmqw {font-fami…...

wps中的js开发
严格区分大小写 /*** learn_js Macro*/ function test() {Range(D7).Value2Selection.Value2; // Selection.formula "100" }function Workbook_SheetSelectionChange(Sh, Target) {if(Sh.Name Sheet1) {test();}}function test2() {// 把I4单元格及其周边有数的单…...

day16_推荐系统和总结
文章目录 day16_推荐系统和总结一、推荐实现1、基于流行度推荐(掌握)1.1 近期热门商品推荐1.2 个人热门商品推荐 2、基于隐语义模型的协同过滤推荐(了解)2.1 ALS算法介绍2.2 推荐代码 3、基于物品的协同过滤推荐(了解&…...

一文说清楚编码、摘要、加密、公钥、私钥、解密、签名、验签
编码 对信息进行编码,没有信息损失,任何人都能通过编码方式对信息进行解码。例如 ASCII 码,base64 编码。 例如下面是 ASCII 编码表: 摘要 对信息计算摘要值,有信息损失,例如 md5 摘要,sh…...

Repeated Sequence
记suma[1]a[2]a[3]...a[n]。 该序列以a[1],a[2],a[3]....a[n]为循环节,明显的,问题可转化为:s%sum是否为该序列的某个连续子序列和。 断环为链。将a复制一份。 枚举a[i]为左端点的所有区间的和。再查找s是否存在。二分O&#x…...

CT dicom 去除床板 去除床位,检查床去除
1. 前言 医院拍摄患者CT与MRI 图像, 但是CT图像中就会出现检查床的区域,来看CT扫描设备是什么样子的,红色标出区域 可以在图中看到,在头部位置安装有固定头部的类似支架的东西,这个东西拍摄出来时什么样子呢ÿ…...

react 踩坑记 too many re-renders.
报错信息: too many re-renders. React limits the number of randers to prevent an infinite loop. 需求 tabs只有特定标签页才展示某些按钮 button要用 传递函数引用方式 ()>{} *还有要注意子组件内loading触发 导致的重复渲染...

YOLOv8与BiFormer注意力机制的融合:提升多场景目标检测性能的研究
文章目录 1. YOLOv8的改进背景2. BiFormer注意力机制的核心原理2.1 Bi-level Attention结构2.2 路由策略与加权融合 3. YOLOv8与BiFormer的结合3.1 YOLOv8架构概述3.2 BiFormer与YOLOv8的融合策略 4. 实现代码示例5. 结果分析与实验5.1 数据集与实验设置5.2 实验结果 6. 进一步…...

Ubuntu24.04LTS的下载安装超细图文教程(VMware虚拟机及正常安装)
😸个人主页👉:神兽汤姆猫 📖系列专栏:开发语言环境配置 、 Java学习 、Java面试 、Markdown等 学习上的每一次进步,均来自于平时的努力与坚持。 💕如果此篇文章对您有帮助的话,请点…...

c++贪心系列
各位小伙伴们新年好呀,这是年后的第一篇文章,那么还是一样,我们继续学习这个贪心算法。 第一题 题目链接 2418. 按身高排序 - 力扣(LeetCode) 题目解析 代码原理 方法一 1.先创建一个下标数组,将两个数…...
爬虫第七篇数据爬取及解析
这篇博客旨在分享学习过程中的心得和体会,如果有错误请指出,感谢大家。 经过前面的学习,那么我们也就进入了数据爬取的阶段,大家跟着我的步伐一起来学习一下,爬虫的数据爬取与数据解析(本篇主要针对于带有…...

LangChain 技术入门指南:探索语言模型的无限可能
在当今的技术领域,LangChain 正逐渐崭露头角,成为开发语言模型应用的强大工具。如果你渴望深入了解并掌握这一技术,那么就跟随本文一起开启 LangChain 的入门之旅吧! (后续将持续输出关于LangChain的技术文章,有兴趣的同学可以关注…...

解锁D3.js与PlantUML的交互奥秘:探索知识图谱数据可视化新领域
解锁D3.js与PlantUML的交互魔法:数据可视化新征程 在前端开发的广袤天地里,数据可视化一直是一颗璀璨的明珠,吸引着无数开发者探索其奥秘。而当D3.js这一强大的JavaScript库,遇上专注于创建UML图的PlantUML,一场奇妙的…...
OpenCV机器学习(8)随机森林(Random Forests)算法cv::ml::RTrees类
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::ml::RTrees 是 OpenCV 机器学习模块中的一部分,用于实现随机森林(Random Forests)算法。随机森林是一种集…...
Java四大框架深度剖析:MyBatis、Spring、SpringMVC与SpringBoot
目录 前言: 一、MyBatis框架 1. 概述 2. 核心特性 3. 应用场景 4. 示例代码 二、Spring框架 1. 概述 2. 核心模块 3. 应用场景 4. 示例代码 三、SpringMVC框架 1. 概述 2. 核心特性 3. 应用场景 4. 示例代码 四、SpringBoot框架 1. 概述 2. 核心…...

MySQL系列之身份鉴别(安全)
导览 前言Q:如何保障MySQL数据库身份鉴别的有效性一、有效性检查 1. 用户唯一2. 启用密码验证3. 是否存在空口令用户4. 是否启用口令复杂度校验5. 是否设置口令的有效期6. 是否限制登录失败尝试次数7. 是否设置(超过尝试次数)锁定的最小时长…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...