深度学习之图像回归(二)

前言

这篇文章主要是在图像回归(一)的基础上对该项目进行的优化。(一)主要是帮助迅速入门 理清一个深度学习项目的逻辑 这篇文章则主要注重在此基础上对于数据预处理和模型训练进行优化前者会通过涉及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)

    # 应用PCA
    pca = 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个),让模型只用这些重要的特征来学习。

为什么
  1. 减少计算量:模型只需要处理少量的特征,训练速度会更快。

  2. 提高模型性能:去除无关特征后,模型可以更专注于重要的特征,预测效果可能会更好。

怎么办
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×权重 → 权重会自动变小
  • 物理意义:强制让模型参数趋向于较小的值,抑制模型复杂度

模型训练的优化

模型复杂度的体现

在机器学习中,模型复杂度通常指的是模型的参数数量和参数的大小。一个复杂的模型可能具有以下特点:

  • 参数数量多:模型中有大量的参数,例如深度神经网络中的权重和偏置。

  • 参数值大:模型的参数值(权重)可能很大,这意味着模型对输入特征的响应非常敏感。

复杂模型虽然能够很好地拟合训练数据(甚至可以完美拟合),但往往会过拟合,即在训练数据上表现很好,但在新的、未见过的数据上表现不佳。这是因为复杂模型可能会学习到训练数据中的噪声和细节,而不是数据的真实规律。

为什么要限制模型复杂度

限制模型复杂度的主要目的是提高模型的泛化能力,即让模型在新的、未见过的数据上表现更好。具体原因包括:

  1. 防止过拟合:复杂模型容易过拟合,因为它们可以学习到训练数据中的噪声和细节。通过限制复杂度,模型更倾向于学习数据的基本规律,而不是噪声。

  2. 简化模型:减少模型的参数数量或参数大小,可以使模型更简洁、更易于解释。这也有助于减少计算成本和训练时间。

  3. 提高稳定性:限制复杂度可以减少模型对输入数据的敏感性,使其在面对小的扰动时更加稳定。

如何限制模型复杂度

通过正则化项对损失函数进行约束

原始的损失函数计算

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             # 返回损失。

常见的正则化方法

  1. L1正则化(Lasso)

    • 在损失函数中添加参数的绝对值之和作为惩罚项。

    • 公式:Lossnew​=Loss+λ∑i​∣wi​∣

    • 作用:L1正则化会促使某些参数变为零,从而实现稀疏性(即自动特征选择)。

    • 直观理解:通过惩罚参数的绝对值,强迫模型丢弃一些不重要的特征。

  2. L2正则化(Ridge)

    • 在损失函数中添加参数的平方和作为惩罚项。

    • 公式:Lossnew​=Loss+λ∑i​wi2​

    • 作用:L2正则化会使得所有参数的值变得更小(但不会变为零),从而减少模型对每个特征的依赖。

    • 直观理解:通过惩罚参数的平方,限制参数的大小,使模型更“平滑”。

  3. Dropout

    • 在训练过程中随机丢弃部分神经元的输出。

    • 作用:防止神经元之间的共适应性,减少模型对某些特定输入的依赖,从而提高泛化能力。

  4. Early Stopping

    • 在训练过程中监控模型在验证集上的性能,当性能不再提升时停止训练。

    • 作用:防止模型过度拟合训练数据

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用分治策略优化快速排序

1. 基本思想 分治快速排序(Quick Sort)是一种基于分治法的排序算法,采用递归的方式将一个数组分割成小的子数组,并通过交换元素来使得每个子数组元素按照特定顺序排列,最终将整个数组排序。 快速排序的基本步骤&#…

照片模糊怎么变清晰?图生生AI修图-一键清晰放大

当打开手机相册时,那些泛着噪点的合影、细节模糊的风景照、像素化的证件图片,让珍贵时刻蒙上遗憾的面纱。而专业级图像修复工具的门槛,让多数人只能无奈接受这些"不完美的记忆"。AI技术的发展,让普通用户也能轻松拥有专…

Linux 网络与常用操作(适合开发/运维/网络工程师)

目录 OSI 七层协议简介 应用层 传输层 Linux 命令!!! 1. ifconfig 命令 简介 1. 查看网络地址信息 2. 指定开启、或者关闭网卡 3. 修改、设置 IP 地址 4. 修改机器的 MAC 地址信息 5. 永久修改网络设备信息 2. route 路由命令 …

PID控制学习

前言 本篇文章属于PID控制算法的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 PID入门教程-电机控制 倒立摆 持续更新中_哔哩哔哩_bilibili 一…

第1期 定时器实现非阻塞式程序 按键控制LED闪烁模式

第1期 定时器实现非阻塞式程序 按键控制LED闪烁模式 解决按键扫描,松手检测时阻塞的问题实现LED闪烁的非阻塞总结补充(为什么不会阻塞) 参考江协科技 KEY1和KEY2两者独立控制互不影响 阻塞:如果按下按键不松手,程序就…

【Arxiv 大模型最新进展】PEAR: 零额外推理开销,提升RAG性能!(★AI最前线★)

【Arxiv 大模型最新进展】PEAR: 零额外推理开销,提升RAG性能!(★AI最前线★) 🌟 嗨,你好,我是 青松 ! 🌈 自小刺头深草里,而今渐觉出蓬蒿。 NLP Github 项目…

vscode的一些实用操作

1. 焦点切换(比如主要用到使用快捷键在编辑区和终端区进行切换操作) 2. 跳转行号 使用ctrl g,然后输入指定的文件内容,即可跳转到相应位置。 使用ctrl p,然后输入指定的行号,回车即可跳转到相应行号位置。

OAI 平台 4G(LTE)基站 、终端、核心网 端到端部署实践(一)

本系列文章,基于OAI LTE代码搭建端到端运行环境,包含 eNB,EPC,UE三个网元。本小节先介绍系统总体架构,硬件平台及驱动安装方法。 1. Overview 系统总体架构如下图所示。 2 Machine setup 2.1 Machine specs Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS…

Linux环境Docker使用代理推拉镜像

闲扯几句 不知不觉已经2月中了,1个半月忙得没写博客,这篇其实很早就想写了(可追溯到Docker刚刚无法拉镜像的时候),由于工作和生活上的事比较多又在备考软考架构,拖了好久…… 简单记录下怎么做的&#xf…

基于TI的TDA4高速信号仿真条件的理解 4.6

Application Note 《Jacinto7 AM6x, TDA4x, and DRA8x High-Speed Interface Design Guidelines》 4.6 Reviewing Simulation Results检查仿真结果 The results generated by the channel simulations outlined in the preceding sections are compared against an eye mask s…

unity学习46:反向动力学IK

目录 1 正向动力学和反向动力学 1.1 正向动力学 1.2 反向动力学 1.3 实现目标 2 实现反向动力 2.1 先定义一个目标 2.2 动画层layer,需要加 IK pass 2.3 增加头部朝向代码 2.3.1 专门的IK方法 OnAnimatorIK(int layerIndex){} 2.3.2 增加朝向代码 2.4 …

DeepSeek 和 ChatGPT 在特定任务中的表现:逻辑推理与创意生成

🎁个人主页:我们的五年 🔍系列专栏:Linux网络编程 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 ​ Linux网络编程笔记: https://blog.cs…

DAY07 Collection、Iterator、泛型、数据结构

学习目标 能够说出集合与数组的区别数组:1.是引用数据类型的一种2.可以存储多个元素3.数组的长度是固定的 int[] arr1 new int[10]; int[] arr2 {1,2,3};4.数组即可以存储基本类型的数据,又可以存储引用数据类型的数据int[],double[],String[],Student[]集合:1.是引用数据类…

ls命令的全面参数解析与详尽使用指南

目录 ls 命令的所有参数及含义 ls -a 命令详解 ls -A 命令详解 ls -b 命令详解 ls -C 命令详解 ls -d 命令详解 ls -f 命令详解 ls -F 命令详解 ls -G 命令详解 ls -h 命令详解 ls -H 命令详解 ls -i 命令详解 ls -I 命令详解 ls -l 命令详解 ls -L 命令详解 l…

【Spring+MyBatis】_图书管理系统(中篇)

【SpringMyBatis】_图书管理系统(上篇)-CSDN博客文章浏览阅读654次,点赞4次,收藏7次。(1)当前页的内容records(类型为List);参数:userNameadmin&&pas…

动态规划算法篇:枚举的艺术

那么本篇文章就正式进入了动态规划的算法的学习,那么动态规划算法也可谓是算法内容中的一座大山,那么在大厂算法笔试乃至算法比赛中出现的频率也逐渐变高,那么可见学习好动态规划算法的一个重要性,那么对于动态规划最难理解的&…

算法——舞蹈链算法

一,基本概念 算法简介 舞蹈链算法(Dancing Links,简称 DLX)是一种高效解决精确覆盖问题的算法,实际上是一种数据结构,可以用来实现 X算法,以解决精确覆盖问题。由高德纳(Donald E.…

翻转硬币(思维题,巧用bitset)

0翻转硬币 - 蓝桥云课 #include <bits/stdc.h> using namespace std; bitset<200000001> t; int main() {int n;cin>>n;int ans1;t[1]1;int totn-1;for(int i2;i<n;i){if(t[i]) continue;int ji;ans;while(j<n){t[j]!t[j];if(t[j]) tot--;else tot;ji;…

网络安全等级保护测评(等保测评):全面指南与准备要点

等保测评&#xff0c;全称为“网络安全等级保护测评”&#xff0c;是根据《网络安全法》及《网络安全等级保护条例》等法律法规&#xff0c;对信息系统进行安全等级划分&#xff0c;并依据不同等级的安全保护要求&#xff0c;采用科学方法和技术手段&#xff0c;全面评估信息系…

blackbox.ai 一站式AI代理 畅享顶级模型

最近Deepseek火遍大江南北&#xff0c;一夜之间到处都能看到有人在体验AI技术。然而这也带来了一些困难&#xff1a;由于服务器压力过大&#xff0c;ds开始使用了一些限流的措施。 实际上这只是针对免费用户的限制手段&#xff0c;通过API付费方式的用户并没有这样的限制。所以…