【机器学习 | 数据预处理】 提升模型性能,优化特征表达:数据标准化和归一化的数值处理技巧探析

news2024/11/26 21:31:37

在这里插入图片描述

🤵‍♂️ 个人主页: @AI_magician
📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)

在这里插入图片描述

该文章收录专栏
[✨— 《深入解析机器学习:从原理到应用的全面指南》 —✨]

数据标准化和归一化

在使用梯度下降算法进行模型训练时,对输入特征进行比例缩放(或归一化)有以下几个原因:

  1. 加速收敛:梯度下降的目标是找到损失函数最小化的参数值,而不同特征可能具有不同的尺度和范围。如果某些特征具有较大的值范围,那么**其相关权重更新也会更大,这可能导致算法收敛过程变得非常缓慢甚至无法收敛。**通过对输入特征进行比例缩放,可以使各个特征都处于相似的尺度范围内,从而加快算法收敛速度。

  2. 防止数值溢出:在计算过程中,**涉及到较大或较小数值时容易发生数值溢出问题。**通过将输入特征进行比例缩放,可以有效地避免这种情况的发生。

  3. 提高模型性能:某些机器学习模型(如支持向量机、K近邻等)对输入数据中不同尺度和范围非常敏感。当存在明显差异的尺度时,在距离计算、权重分配等方面可能会产生偏差,并且影响模型性能。通过比例缩放输入特征,可以确保模型能够更好地利用每个特征的信息,提高模型性能。

在线性回归中,尤其是多变量回归模型,由于各个的数据之间量化纲位不同,如果说两个参数尺度范围分别是是【0~1000,0 ~5】或者【-0.00004 ~ 0.00002,10 ~ 30】, 那么在使用梯度下降算法时,他们的等高线是一个又窄又高的等高线,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CmC376b8-1691910708715)(data preprocessing.assets/ed4bf86589724f8eb5b61e1fdbee9ccb.png)]

因为一个他们量化纲位不同会出现 (1,299),(3,800) 这种特征实例,那么等高线就会又窄又高,在梯度下降算法中,参数更新就会如上图左右震荡(权重更新一点就会导致输出变大,对大尺度的特征更加敏感,不利于学习)如果等高线如下图,参数更新就能更快收敛与更新了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bbpo6wP4-1691910708716)(data preprocessing.assets/17b724491d0446e79d13f0d763ce9eab.png)]

如下图:代价函数(如MSE: 回归模型的预测值和实际值的差的平方和)的3D图,就像下山一样,为了达到局部最优点或全局最优点,作为下山者,你肯定希望地形比较平缓,比较清楚的知道往哪里走能够最快下山,而如果这个山又陡又窄,那下山者是不是下山肯定速度慢很多(更新中不能较快收敛,左右震荡),往哪里都是下降,不能准确找到方向。

理想的代价函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Ct4KTlK-1691910708716)(data preprocessing.assets/d0fe871ee702492c95dc9935a144d462.png)]

但实际往往都是下图的情况 (有许多局部最优)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lYlKywWm-1691910708717)(data preprocessing.assets/998fd4c4f7fa42fa92569882d19ab44e.png)]

数据标准化和归一化是常见的数据预处理技术,它们在以下情况下使用:

  1. 特征缩放:当特征的取值范围差异较大时,可以使用数据标准化或归一化来将其缩放到相似的范围。这有助于避免某些特征对模型训练产生过大影响

  2. 收敛加速:在某些机器学习算法(如梯度下降)中,如果不进行数据标准化或归一化,则可能需要更多迭代次数才能收敛到最优解。通过使特征具有类似的尺度,可以提高算法收敛速度(不再左右震荡,权重更新性价比相同,特征之前模型一视同仁)并加快训练过程。

  3. 防止数值溢出:当输入数据包含非常大或非常小的值时,计算中可能会发生数值溢出或舍入误差。通过将数据缩放到合理范围内,可以避免这些问题,并提高计算稳定性。

  4. 算法要求:某些机器学习算法(如K均值聚类、支持向量机等)对输入数据进行了假设,例如假设样本服从正态分布。(机器学习算法最重要的概率统计,如果尺度和范围不同,显然很难拟合分布)在这种情况下,对于满足这些假设的算法而言,数据标准化或归一化是必要的预处理步骤。

尽管数据标准化和归一化在许多情况下都很有用,但并不是所有算法都需要进行这些操作。例如,决策树和随机森林等基于树的模型通常不受特征缩放影响(这种是基于不同类别的信息增益(信息熵)或者基尼指数(类别纯度)确定阈值,而图像识别等深度学习任务则通常对原始输入进行归一化处理。

在实践中,可以使用以下方法来进行数据标准化和归一化:

  • 数据标准化(Standardization):通过将每个特征值减去其均值,并除以其标准差来使特征具有零均值和单位方差。(这也是我们在平时数学上求正态分布的算法,使其均值为0,方差为1)
  • 数据归一化(Normalization):通过将每个特征值按比例缩放到给定范围内(如0到1之间)来保持相对关系

请注意,在应用这些技术时,应该先分割出训练集和测试集,并且仅使用训练集上的统计信息来对整个数据集进行转换。然后将相同的变换应用于测试集以确保结果的可靠性。

在选择数据标准化(Standardization)和数据归一化(Normalization)之前,需要根据具体情况来评估它们的优劣。

  1. 数据标准化的优点:

    • 保留了原始数据分布的形状,不会改变特征的相对关系
    • 对异常值不敏感。由于使用均值和标准差进行缩放,异常值对结果影响较小
    • 在某些机器学习算法中表现较好,如逻辑回归、线性回归等基于距离计算或梯度下降的模型。
  2. 数据归一化的优点:

    • 将特征缩放到固定范围内有利于比较不同单位或取值范围的特征
    • 有助于加速收敛过程,在某些机器学习算法中可能提高训练速度。
    • 在某些算法要求输入数据处于特定范围时非常有用,如支持向量机、K均值聚类等。

因此,在选择数据标准化还是数据归一化时可以考虑以下因素:

  • 特征类型:如果特征之间具有明显的大小差异,并且你希望保留其相对关系,则可以选择使用数据标准化(比如人体大小与头发大小,人体总体一定远远大于头发的关系)。如果你更关心特征的绝对值或需要将其缩放到固定范围内,则可以选择数据归一化。
  • 算法要求:某些算法对输入数据有特定的要求,例如支持向量机需要使用归一化后的数据。在这种情况下,你应该根据算法要求来选择适当的预处理方法。
  • 实验结果:尝试不同的预处理方法并比较它们在模型性能上的效果。根据实际结果来选择最佳方法。

总而言之,没有单一正确答案。选择数据标准化还是归一化取决于你所面临问题和具体需求,并且可能需要进行试验和评估以确定最佳方案。(实践是证明真理的唯一标准!!! —— 伽利略)

BatchNormalization

在深度学习上,Batch Normalization(批标准化)可以在某种程度上替代数据归一化和标准化。

Batch Normalization 是一种用于加速深度神经网络收敛、防止梯度消失/爆炸等问题的技术。它通过对每个小批量样本进行均值和方差的归一化来规范输入数据,并将其缩放和平移以恢复数据分布。

Batch Normalization 的优点包括:

  1. 自适应性:相比于单纯的数据预处理方法,如标准化或归一化,Batch Normalization 能够自动学习适合当前训练批次的均值和方差。
  2. 抑制梯度问题:通过将每层输入进行规范化,Batch Normalization 有助于解决梯度消失/爆炸问题(如权重问题,数据尺度和范围问题导致的上溢下溢等问题),使得神经网络更容易训练。
  3. 正则化效果:由于 Batch Normalization 引入了额外参数来调整特征缩放和平移(比如比例缩放偏置移动),它具有正则化效果,并且能够稍微提高模型泛化能力。

因此,在使用深度神经网络时,可以考虑直接使用 Batch Norm 进行特征处理而不需要显式地对输入进行标准化或归一化。但请注意以下事项:

  • 执行顺序:如果使用 Batch Normalization,通常应该在每个隐藏层的激活函数之前进行批标准化。这样可以确保网络从输入层到输出层的所有中间特征都受益于规范化。
  • 数据分布:Batch Normalization 是基于小批量数据的统计信息来进行归一化操作的,因此对于较小规模或不均衡的数据集可能效果不佳。
  • 预训练模型:如果你使用了预训练好的模型(如 ImageNet 上预训练过的卷积神经网络),则需要根据原始模型是否已经包含 Batch Norm 来决定是否需要进一步处理。

总结而言,Batch Normalization 在深度神经网络中是非常有用和有效的技术,并且可以部分替代传统的数据归一化和标准化方法。但具体选择还要根据实际情况和实验结果来确定。

数据划分

对于机器学习模型的训练,通常需要将数据集划分为训练集和测试集。而验证集是用于模型调优和选择最佳超参数的辅助数据集。

下面是对训练集、验证集和测试集的解释及其区别:

  1. 训练集(Training Set):训练集是用于训练机器学习模型的数据集。模型通过对训练集的样本进行学习和参数调整,以最小化训练集上的损失函数。训练集通常占整个数据集的大部分比例。

  2. 验证集(Validation Set):验证集是用于模型调优和选择最佳超参数的数据集(如果没有测试集,对着验证集炼丹反而有可能拟合验证集)。在训练过程中,使用验证集评估模型在未见过的数据上的性能,并进行模型参数的调整。通过在验证集上的表现,可以选择最佳的模型配置和超参数,以获得更好的泛化能力。

  3. 测试集(Test Set):测试集是用于评估训练好的模型的性能和泛化能力的数据集。测试集是模型未曾见过的数据,用于模拟模型在实际应用中遇到的新样本。通过测试集上的表现,可以得出对模型的客观评价。

区别:

  • 训练集用于训练模型的参数,目标是使模型能够对训练数据进行准确拟合。
  • 验证集用于模型调优和选择超参数,目标是选择最佳的模型配置,使模型具有良好的泛化能力。
  • 测试集用于评估模型的性能和泛化能力,目标是得出对模型的客观评价。

重要的一点是,验证集和测试集都是在训练阶段以外的数据上进行评估,以避免模型在训练数据上过度拟合。它们的目的是验证和衡量模型的性能,但验证集用于模型调优,而测试集则用于最终评估模型的性能。
在这里插入图片描述

						  🤞到这里,如果还有什么疑问🤞
					🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩
					 	 🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳

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

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

相关文章

勇敢牛牛,爱吃青草

牛顿问题(牛吃草问题 / 消长问题) 牛顿问题(牛吃草问题/消长问题) 牛顿问题(牛吃草问题/消长问题) 牧场上有一片青草,每天都生长得一样快。这片青草供给 10 头牛吃,可以吃 22 天&…

元宇宙时代超高清视音频技术白皮书关于流媒体协议和媒体传输解读

流媒体协议 元宇宙业务场景对流媒体传输的实时性和互动性提出了更高的要求,这就需要在传统的 RTMP、SRT、 HLS 等基础上增加实时互动的支持。实时互动,指在远程条件下沟通、协作,可随时随地接入、实时地传递虚实融合的多维信息,身…

LangChain-ChatGLM在WIndows10下的部署

LangChain-ChatGLM在WIndows10下的部署 参考资料 1、LangChain ChatGLM2-6B 搭建个人专属知识库中的LangChain ChatGLM2-6B 构建知识库这一节:基本的逻辑和步骤是对的,但要根据Windows和现状做很多调整。 2、没有动过model_config.py中的“LORA_MOD…

Idea中使用statement接口对象,显示mysql版本号,所有库和表名

使用statement 接口对象,进行以下操作: 显示数据库版本号显示所有库显示所有库中的table表 显示数据库版本号: public class StatementDemo {Testvoid showall(){try{Statement st conn.createStatement();ResultSet rs st.executeQuery(…

C++_模板初阶

在面向对象中,我们可以使用重载来实现多态。 但是问题在于,重载的函数仅仅是类型不同,代码复用率比较低,只要有新的类型出现时,就要增加对应的函数;另一方面它的代码可维护性比较低,一个出错可…

python递归实现逆序输出数字

一、问题描述 编程实现将输入的整数逆序输出 二、问题分析 逆序输出数字实际是一个数值问题的递归 三、算法设计 该问题要求输入任意一个整数,实现它的逆序输出。首先判断输入的整数是正整数还是负整数,如果是负整数, 则在逆序输出前应先…

1059 Prime Factors

个人学习记录&#xff0c;代码难免不尽人意。 Sample Input: 97532468 Sample Output: 975324682^211171011291 下面是我第一次自己写的错误代码&#xff0c;虽然测试点都通过了&#xff0c;但是是因为测试样例有限的原因。 #include<cstdio> #include<iostream> #…

防御第九次作业

一、根据以下问题总结当天内容 1. SSL工作过程是什么&#xff1f; 当客户端向一个 https 网站发起请求时&#xff0c;服务器会将 SSL 证书发送给客户端进行校验&#xff0c;SSL 证书中包含一个公钥。校验成功后&#xff0c;客户端会生成一个随机串&#xff0c;并使用受访网站的…

OSI七层模型及TCP/IP四层模型

目录 OSI七层模型 TCP/IP四层模型 OIS七层模型和TCP/IP模型图 七层详解 两种模型比较 为什么OSI七层体系结构不常用 四层详解 网络为什么要分层&#xff1f; 说说 OSI 七层模型和 TCP/IP 四层模型的关系和区别 OSI七层模型 OSI&#xff08;Open System Interconnect&a…

5.3 个人隐私保护

数据参考&#xff1a;CISP官方 目录 一、数据泄露与隐私保护问题二、信息的泄露途径三、个人隐私信息保护四、组织机构敏感信息保护 一、数据泄露与隐私保护问题 1、数据泄露事件 数据的价值已经得到高度的认可不可避免的面临安全威胁2018年华住集团数据泄露事件中国电信…

代码控制鼠标光标移动并点击和代码模拟键盘按下(C#)

前面介绍过通过代码的方式模拟键盘按下&#xff0c;博文如下&#xff1a; C#通过代码的方式模拟键盘按下_c# 模拟键盘输入_zxy2847225301的博客-CSDN博客 这个博文是通过win32的keybd_event实现&#xff0c;可能会未来的window版本中被淘汰(不是我说的&#xff0c;看到老外一…

简单线性回归:预测事物间简单关系的利器

文章目录 &#x1f340;简介&#x1f340;什么是简单线性回归&#xff1f;&#x1f340;简单线性回归的应用场景使用步骤&#xff1a;注意事项&#xff1a; &#x1f340;代码演示&#x1f340;结论 &#x1f340;简介 在数据科学领域&#xff0c;线性回归是一种基本而强大的统…

Failed to start LVS and VRRP High Availability Monitor.

Keepalive启动报错&#xff0c;Fail to start LVS and VRRP High Availability Monitor. 解决方法 &#xff1a; cd /etc/keepalived/cp keepalived.conf.sample keepalived.conf vim keepalived.conf //找到这个模块并修改接口名称 vrrp_instance VI_1 {state MASTERinterfac…

Jeecg-boot JDBC任意代码执行漏洞

漏洞描述 JeecgBoot是一款开源的企业级低代码平台&#xff0c;提供了表单、视图、流程等一键生成代码功能&#xff0c;目前在GitHub具有 35.5k star。 在V3版本中&#xff0c;由于未对JDBC连接字符串进行限制&#xff0c;未授权的攻击者可配置恶意的连接字符串&#xff0c;通…

岛屿的最大面积(力扣)递归 JAVA

给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0&#xff08;代表水&#xff09;包围着。 岛屿的面积是岛上值为 1 的…

Redis的数据结构到底是一种什么样的结构?

有了上一篇NoSQL的基础&#xff0c;我们也都知道了Redis就是一种典型的NoSql&#xff0c;那我们就先简简单单的介绍一下Redis&#xff1a; Redis是什么&#xff1f; Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的使用ANSI C语言编写的高性能键值存储系统…

Kalman Filter VS Particle Filter

概率图模型 时间 -------->动态模型 动态模型有下面三种&#xff1a; 如果状态是离散的&#xff0c;就是我们上一节提到了Hidden Markov Model (HMM)&#xff1b; 如果状态是连续的&#xff0c;如果状态之间的关系是线性的&#xff0c;就是Linear Dynamic System (Kalman …

【第二阶段】kotlin语言的匿名函数与具名函数

fun main() {//匿名函数val niminginfoniming("kotlin",20,{"$it"})println(niminginfo)//具名函数 理解&#xff1a;showResult:(String)->String):StringshowResultImpl(result:String):Stringval juminginfoniming("c ",20,::showResultI…

【jvm】类加载器的分类

目录 一、说明二、示例2.1 代码2.2 截图 一、说明 1.jvm支持两种类型的类加载器&#xff0c;分别是引导类加载器&#xff08;bootstrap classloader&#xff09;和自定义类加载器&#xff08;user-defined classloader&#xff09; 2.自定义类加载器一般指的是程序中由开发人员…

Python 中被忽视的核心功能

这篇文章主要介绍了一些在 Python 编程中可能被忽视的核心功能&#xff0c;包括默认参数、海象运算符、*args 和 **kwargs 的使用、变量交换、str 与 repr 的区别、可迭代对象的扩展解包、多个上下文管理器的使用、Python 调试器、collections.Counter 的使用、itertools 的使用…