【机器学习 | 数据预处理】 提升模型性能,优化特征表达:数据标准化和归一化的数值处理技巧探析
🤵♂️ 个人主页: @AI_magician
📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
👨💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱🏍
🙋♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)
该文章收录专栏
[✨— 《深入解析机器学习:从原理到应用的全面指南》 —✨]
数据标准化和归一化
在使用梯度下降算法进行模型训练时,对输入特征进行比例缩放(或归一化)有以下几个原因:
-
加速收敛:梯度下降的目标是找到损失函数最小化的参数值,而不同特征可能具有不同的尺度和范围。如果某些特征具有较大的值范围,那么**其相关权重更新也会更大,这可能导致算法收敛过程变得非常缓慢甚至无法收敛。**通过对输入特征进行比例缩放,可以使各个特征都处于相似的尺度范围内,从而加快算法收敛速度。
-
防止数值溢出:在计算过程中,**涉及到较大或较小数值时容易发生数值溢出问题。**通过将输入特征进行比例缩放,可以有效地避免这种情况的发生。
-
提高模型性能:某些机器学习模型(如支持向量机、K近邻等)对输入数据中不同尺度和范围非常敏感。当存在明显差异的尺度时,在距离计算、权重分配等方面可能会产生偏差,并且影响模型性能。通过比例缩放输入特征,可以确保模型能够更好地利用每个特征的信息,提高模型性能。
在线性回归中,尤其是多变量回归模型,由于各个的数据之间量化纲位不同,如果说两个参数尺度范围分别是是【0~1000,0 ~5】或者【-0.00004 ~ 0.00002,10 ~ 30】, 那么在使用梯度下降算法时,他们的等高线是一个又窄又高的等高线,如下图:
因为一个他们量化纲位不同会出现 (1,299),(3,800) 这种特征实例,那么等高线就会又窄又高,在梯度下降算法中,参数更新就会如上图左右震荡(权重更新一点就会导致输出变大,对大尺度的特征更加敏感,不利于学习)如果等高线如下图,参数更新就能更快收敛与更新了
如下图:代价函数(如MSE: 回归模型的预测值和实际值的差的平方和)的3D图,就像下山一样,为了达到局部最优点或全局最优点,作为下山者,你肯定希望地形比较平缓,比较清楚的知道往哪里走能够最快下山,而如果这个山又陡又窄,那下山者是不是下山肯定速度慢很多(更新中不能较快收敛,左右震荡),往哪里都是下降,不能准确找到方向。
理想的代价函数
但实际往往都是下图的情况 (有许多局部最优)
数据标准化和归一化是常见的数据预处理技术,它们在以下情况下使用:
-
特征缩放:当特征的取值范围差异较大时,可以使用数据标准化或归一化来将其缩放到相似的范围。这有助于避免某些特征对模型训练产生过大影响。
-
收敛加速:在某些机器学习算法(如梯度下降)中,如果不进行数据标准化或归一化,则可能需要更多迭代次数才能收敛到最优解。通过使特征具有类似的尺度,可以提高算法收敛速度(不再左右震荡,权重更新性价比相同,特征之前模型一视同仁)并加快训练过程。
-
防止数值溢出:当输入数据包含非常大或非常小的值时,计算中可能会发生数值溢出或舍入误差。通过将数据缩放到合理范围内,可以避免这些问题,并提高计算稳定性。
-
算法要求:某些机器学习算法(如K均值聚类、支持向量机等)对输入数据进行了假设,例如假设样本服从正态分布。(机器学习算法最重要的概率统计,如果尺度和范围不同,显然很难拟合分布)在这种情况下,对于满足这些假设的算法而言,数据标准化或归一化是必要的预处理步骤。
尽管数据标准化和归一化在许多情况下都很有用,但并不是所有算法都需要进行这些操作。例如,决策树和随机森林等基于树的模型通常不受特征缩放影响(这种是基于不同类别的信息增益(信息熵)或者基尼指数(类别纯度)确定阈值,而图像识别等深度学习任务则通常对原始输入进行归一化处理。
在实践中,可以使用以下方法来进行数据标准化和归一化:
- 数据标准化(Standardization):通过将每个特征值减去其均值,并除以其标准差来使特征具有零均值和单位方差。(这也是我们在平时数学上求正态分布的算法,使其均值为0,方差为1)
- 数据归一化(Normalization):通过将每个特征值按比例缩放到给定范围内(如0到1之间)来保持相对关系。
请注意,在应用这些技术时,应该先分割出训练集和测试集,并且仅使用训练集上的统计信息来对整个数据集进行转换。然后将相同的变换应用于测试集以确保结果的可靠性。
在选择数据标准化(Standardization)和数据归一化(Normalization)之前,需要根据具体情况来评估它们的优劣。
-
数据标准化的优点:
- 保留了原始数据分布的形状,不会改变特征的相对关系。
- 对异常值不敏感。由于使用均值和标准差进行缩放,异常值对结果影响较小。
- 在某些机器学习算法中表现较好,如逻辑回归、线性回归等基于距离计算或梯度下降的模型。
-
数据归一化的优点:
- 将特征缩放到固定范围内有利于比较不同单位或取值范围的特征。
- 有助于加速收敛过程,在某些机器学习算法中可能提高训练速度。
- 在某些算法要求输入数据处于特定范围时非常有用,如支持向量机、K均值聚类等。
因此,在选择数据标准化还是数据归一化时可以考虑以下因素:
- 特征类型:如果特征之间具有明显的大小差异,并且你希望保留其相对关系,则可以选择使用数据标准化(比如人体大小与头发大小,人体总体一定远远大于头发的关系)。如果你更关心特征的绝对值或需要将其缩放到固定范围内,则可以选择数据归一化。
- 算法要求:某些算法对输入数据有特定的要求,例如支持向量机需要使用归一化后的数据。在这种情况下,你应该根据算法要求来选择适当的预处理方法。
- 实验结果:尝试不同的预处理方法并比较它们在模型性能上的效果。根据实际结果来选择最佳方法。
总而言之,没有单一正确答案。选择数据标准化还是归一化取决于你所面临问题和具体需求,并且可能需要进行试验和评估以确定最佳方案。(实践是证明真理的唯一标准!!! —— 伽利略)
BatchNormalization
在深度学习上,Batch Normalization(批标准化)可以在某种程度上替代数据归一化和标准化。
Batch Normalization 是一种用于加速深度神经网络收敛、防止梯度消失/爆炸等问题的技术。它通过对每个小批量样本进行均值和方差的归一化来规范输入数据,并将其缩放和平移以恢复数据分布。
Batch Normalization 的优点包括:
- 自适应性:相比于单纯的数据预处理方法,如标准化或归一化,Batch Normalization 能够自动学习适合当前训练批次的均值和方差。
- 抑制梯度问题:通过将每层输入进行规范化,Batch Normalization 有助于解决梯度消失/爆炸问题(如权重问题,数据尺度和范围问题导致的上溢下溢等问题),使得神经网络更容易训练。
- 正则化效果:由于 Batch Normalization 引入了额外参数来调整特征缩放和平移(比如比例缩放偏置移动),它具有正则化效果,并且能够稍微提高模型泛化能力。
因此,在使用深度神经网络时,可以考虑直接使用 Batch Norm 进行特征处理而不需要显式地对输入进行标准化或归一化。但请注意以下事项:
- 执行顺序:如果使用 Batch Normalization,通常应该在每个隐藏层的激活函数之前进行批标准化。这样可以确保网络从输入层到输出层的所有中间特征都受益于规范化。
- 数据分布:Batch Normalization 是基于小批量数据的统计信息来进行归一化操作的,因此对于较小规模或不均衡的数据集可能效果不佳。
- 预训练模型:如果你使用了预训练好的模型(如 ImageNet 上预训练过的卷积神经网络),则需要根据原始模型是否已经包含 Batch Norm 来决定是否需要进一步处理。
总结而言,Batch Normalization 在深度神经网络中是非常有用和有效的技术,并且可以部分替代传统的数据归一化和标准化方法。但具体选择还要根据实际情况和实验结果来确定。
数据划分
对于机器学习模型的训练,通常需要将数据集划分为训练集和测试集。而验证集是用于模型调优和选择最佳超参数的辅助数据集。
下面是对训练集、验证集和测试集的解释及其区别:
-
训练集(Training Set):训练集是用于训练机器学习模型的数据集。模型通过对训练集的样本进行学习和参数调整,以最小化训练集上的损失函数。训练集通常占整个数据集的大部分比例。
-
验证集(Validation Set):验证集是用于模型调优和选择最佳超参数的数据集(如果没有测试集,对着验证集炼丹反而有可能拟合验证集)。在训练过程中,使用验证集评估模型在未见过的数据上的性能,并进行模型参数的调整。通过在验证集上的表现,可以选择最佳的模型配置和超参数,以获得更好的泛化能力。
-
测试集(Test Set):测试集是用于评估训练好的模型的性能和泛化能力的数据集。测试集是模型未曾见过的数据,用于模拟模型在实际应用中遇到的新样本。通过测试集上的表现,可以得出对模型的客观评价。
区别:
- 训练集用于训练模型的参数,目标是使模型能够对训练数据进行准确拟合。
- 验证集用于模型调优和选择超参数,目标是选择最佳的模型配置,使模型具有良好的泛化能力。
- 测试集用于评估模型的性能和泛化能力,目标是得出对模型的客观评价。
重要的一点是,验证集和测试集都是在训练阶段以外的数据上进行评估,以避免模型在训练数据上过度拟合。它们的目的是验证和衡量模型的性能,但验证集用于模型调优,而测试集则用于最终评估模型的性能。
🤞到这里,如果还有什么疑问🤞🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳
相关文章:

【机器学习 | 数据预处理】 提升模型性能,优化特征表达:数据标准化和归一化的数值处理技巧探析
🤵♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…...
渐进增强和优雅降级区别
文章目录 前言一、渐进增强二、优雅降级三、两者区别四、渐进增强和优雅降级如何抉择 前言 渐进增强和优雅降级是在css3出现之后才火起来的。比如IE6等,不支持css3,但是css3的样式又特别优秀,所以在高级浏览器中应用css3样式,在低…...
使用provision创建的arxml文件,导入到第三方工具需要注意哪些方面?
provision是一款基于AP AUTOSAR的ARXML设计工具,可以帮助您快速创建和配置ARXML文件。 如果您想要将provision创建的ARXML文件导入到第三方工具中,您需要注意以下几个方面: 您需要确认第三方工具支持的AP AUTOSAR版本和provision生成的ARXML…...
Node.js的核心模块——path
文章目录 path是什么?path怎么用?结论 path是什么? path是Node.js的核心模块,专门用来处理文件路径,path模块为处理文件路径提供了一系列实用的功能和API。 path怎么用? 这里主要介绍一些path模块的常见…...

【MAC】 M2 brew安装 docker 运行失败 解决
MAC 安装 brew install --cask docker 之后一直显示docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?. 网上看了一些文章 发现 这个不适用于M2 所以要从官网上下载 docker 安装成功...

iPhone苹果手机触屏失灵无法关机,如何强制重启
参考:https://zhuanlan.zhihu.com/p/615223121 1,只轻按一下音量上键后快速松开 2,只轻按一下音量下键后快速松开 3,只按住右侧电源键长按不松手,直到手机关机。...

SQL-每日一题【1484. 按日期分组销售产品】
题目 表 Activities: 编写解决方案找出每个日期、销售的不同产品的数量及其名称。 每个日期的销售产品名称应按词典序排列。 返回按 sell_date 排序的结果表。 结果表结果格式如下例所示。 示例 1: 解题思路 前置知识 group_concat函数的功能 将group by产生的…...
java重写与重载的区别
在Java中,重写(Override)和重载(Overload)是两种不同的概念: 重写(Override): 重写是指子类重新定义(覆盖)了从父类继承而来的方法。重写要求子类…...

Unity 框架学习--1
由浅入深,慢慢演化实现框架 两个类的实现代码完全一样,就只有类名或类型不一样的时候,而且还需要不断扩展(未来会增加各种事件)的时候,这时候就用 泛型 继承 来提取,继承解决扩展的问题&#…...
ERROR: While executing gem ... (Gem::FilePermissionError)
sudo gem install -n /usr/local/bin cocoapodsERROR: While executing gem ... (Gem::FilePermissionError)You dont have write permissions for the /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/gems/2.6.0 directory.解决办法: 1.删…...

QT学习笔记-oracle oci数据库驱动交叉编译并移植到ARM开发板
QT学习笔记-oracle oci数据库驱动交叉编译并移植到RK3568ARM开发板 0、背景1、搭建交叉编译环境2、交叉编译过程3、把数据库驱动部署到目标系统中 0、背景 在上一文《QT学习笔记-QT安装oracle oci驱动》中介绍了在Windows环境下使用QT访问oracle数据库时遇到驱动无法加载问题的…...

微服务03-RabbitMQ
1、简介 MQ,中文是消息中间件(队列)(MessageQueue),字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。 简单来说,消息中间件就是指保存数据的一个容器(服务器),可以用于两个系统之间的数据传递。 几种常见MQ的对比: RabbitMQActiveMQRocketMQKafka公司…...

QtCreator ui设置界面 Layout 的属性 layoutStretch
layoutStretch 用于控制Layout在被用户进行缩放时。里面控件的缩放比例。如一个水平布局里面有两个控件 一个 QLineEdit 和 QPushButton。首先将两个控件的尺寸策列的水平策略都设置为Expanding。此时在将包含这两个控件的水平布局的 layoutStretch 进行如下设置。 运行程序就…...

APP外包开发的iOS开发语言
学习iOS开发需要掌握Swift编程语言和相关的开发工具、框架和技术。而学习iOS开发需要时间和耐心,尤其是对于初学者。通过坚持不懈的努力,您可以逐步掌握iOS开发技能,构建出功能丰富、优质的移动应用。今天和大家分享学习iOS开发的一些建议方法…...

sentinel客户端和dashboard交互
回顾 在前面的章节中:通过阐述sentinel简单使用、滑动窗口、核心流程源码分析把sentinel限流、熔断等主要功能说明清楚了,但我们在实际使用的过程中,不可能通过硬编码的方式设置规则,且规则也没法直观的维护,为此肯定…...

vue或uniapp使用pdf.js预览
一、先下载稳定版的pdf.js,可以去官网下载 官网下载地址 或 pdf.js包下载(已配置好,无需修改) 二、下载好的pdf.js文件放在public下静态文件里, uniapp是放在 static下静态文件里 三、使用方式 1. vue项目 注意路径 :src"static/pd…...

virtualBox桥接模式下openEuler镜像修改IP地址、openEule修改IP地址、openEule设置IP地址
安装好openEuler后,设置远程登入前,必不可少的一步,主机与虚拟机之间的通信要解决,下面给出详细步骤: 第一步:检查虚拟机适配器模式:桥接模式 第二步:登入虚拟机修改IP cd /etc/sysconfig/network-scripts vim ifcfg-enpgs3 没有vim的安装或者用vi代替:sudo dnf …...
git unable to get local issuer certificate (_ssl.c:1007)>
原因1:Git无法验证SSL证书 这个错误通常是由于Git无法验证SSL证书导致的。您可以尝试以下方法解决此问题: 确认您的计算机上是否安装了正确的SSL证书。如果没有,请下载并安装它们。您可以使用以下命令在Mac上安装SSL证书: brew…...

QT之时钟
QT之时钟 会用到一个时间类:qtime 定时类:qtimer #------------------------------------------------- # # Project created by QtCreator 2023-08-13T10:49:31 # #-------------------------------------------------QT += core guigreaterThan(QT_MAJOR_VERSION,…...
机器学习基础(四)
KNN算法 KNN:K-Nearest Neighbor,最近领规则分类。 为了判断位置实例的类别,以所有已知类别的实例作为参照选择参数K。计算未知实例与所有已知实例的距离。(一般采用欧氏距离)选择最近K个已知实例。根据少数服从多数的投票法则,让未知实例归类为K个最近邻样本中最多数的类…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...