机器学习数据标准化与归一化:提升模型精度的关键

news2024/12/27 15:37:12

📘数据标准化与归一化:提升模型精度的关键

机器学习中的数据处理环节至关重要,其中,数据标准化与归一化是提高模型性能的关键步骤之一。数据的特征尺度往往不一致,直接影响模型的训练效果,因此对数据进行处理可以显著提高模型的收敛速度和预测准确性。本文将从多个角度解析数据标准化和归一化的方法,并通过具体代码实例进行讲解。


目录

  1. 🔎 为什么需要数据标准化与归一化?
  2. 🧮 数据标准化:均值为0,方差为1的标准化处理
  3. 🔢 数据归一化:值域缩放到特定范围内的处理
  4. 💡 数据标准化与归一化的区别与适用场景
  5. 📈 拓展:Min-Max归一化与Z-Score标准化的代码实现

1. 🔎 为什么需要数据标准化与归一化?

在机器学习模型中,特征数据的尺度差异会影响模型的训练过程。某些算法(如梯度下降法、K-近邻算法和SVM等)对不同特征的尺度非常敏感,尤其是在特征维度差距很大的情况下。未经过处理的特征数据会导致模型在训练过程中对某些特征过度依赖,而忽略其他重要的特征,从而影响模型的最终预测效果。

例如:
在一个简单的回归模型中,有两个特征:身高(单位:米)和收入(单位:人民币)。假设模型在计算时,没有对特征进行标准化或归一化处理,由于“收入”的数量级比“身高”大很多倍,模型可能会更关注收入这个特征,从而忽略了身高对目标变量的影响。因此,统一特征的尺度非常重要,这就是数据标准化与归一化的核心目的。

常见的问题包括:

  • 模型对高数值特征的偏倚
  • 优化算法收敛缓慢
  • 特征的重要性被错误解读

因此,在处理特征数据时,标准化与归一化成为了非常重要的预处理步骤。标准化与归一化可以使得模型更加快速地收敛,同时确保每个特征在模型训练中的贡献均衡。


2. 🧮 数据标准化:均值为0,方差为1的标准化处理

数据标准化是对特征数据进行线性变换,使其服从标准正态分布,即均值为0,方差为1。标准化后的数据更加易于模型处理,特别是在需要计算特征间距离的算法中,如K-近邻(KNN)和支持向量机(SVM)。

数据标准化公式:

标准化的公式如下所示:

在这里插入图片描述

实例代码:

# 导入必要的库
import numpy as np
from sklearn.preprocessing import StandardScaler

# 创建数据集
data = np.array([[2000, 3.5], 
                 [1500, 4.0], 
                 [1800, 3.8]])

# 实例化StandardScaler对象
scaler = StandardScaler()

# 进行标准化
scaled_data = scaler.fit_transform(data)

# 打印标准化后的数据
print("标准化后的数据:\n", scaled_data)

解释:

  1. 首先,数据集的每一列代表一个特征,假设第一个特征是房价(单位:元),第二个特征是评分(单位:满分5分)。
  2. 使用StandardScaler将数据进行标准化,输出结果为每个特征都被转化为均值为0,方差为1的分布。
  3. 标准化后,每个特征的数值变得更加均匀,模型在训练时对各个特征的处理能力将更为均衡。

3. 🔢 数据归一化:值域缩放到特定范围内的处理

归一化的目标是将特征值缩放到一个固定的范围内,通常是[0, 1]或者[-1, 1]。归一化适用于数值范围差异较大的数据,或者当我们希望特征值的影响被均匀分布在某个区间时。归一化后的数据能够避免特征数值较大对模型训练造成的干扰。

数据归一化公式:

归一化的公式如下所示:
在这里插入图片描述

实例代码:

# 导入MinMaxScaler类
from sklearn.preprocessing import MinMaxScaler

# 创建数据集
data = np.array([[2000, 3.5], 
                 [1500, 4.0], 
                 [1800, 3.8]])

# 实例化MinMaxScaler对象
scaler = MinMaxScaler()

# 进行归一化
normalized_data = scaler.fit_transform(data)

# 打印归一化后的数据
print("归一化后的数据:\n", normalized_data)

解释:

  1. 归一化后的数据被缩放到[0, 1]的范围内,确保不同特征之间的数值尺度差异不会过大,减少模型训练时可能的误差积累。
  2. 归一化尤其适用于深度学习中的神经网络模型,因为网络中的激活函数通常要求输入值处于特定的区间(如sigmoid函数的输入区间为[0, 1])。

4. 💡 数据标准化与归一化的区别与适用场景

虽然标准化与归一化在某些方面有相似之处,但它们在实际应用中有不同的适用场景:

区别:

  • 数据标准化:标准化适用于数据服从正态分布的场景,通过将数据的均值调为0,方差调为1,使得特征间的数据更加均匀。它通常用于如支持向量机(SVM)、KNN、线性回归等对数据尺度敏感的模型中。
  • 数据归一化:归一化则常用于当数据不符合正态分布且数值差异较大时,通过缩放将数据映射到固定范围。它常用于深度学习中的神经网络模型以及一些梯度下降类优化算法中。

适用场景:

  • 标准化的适用场景
    • 数据接近正态分布
    • 模型对数值范围不敏感,但对数据的方差或均值有要求的场景
    • 支持向量机(SVM)、KNN、PCA等模型
  • 归一化的适用场景
    • 特征值范围差异较大
    • 数据不遵循正态分布,或需要将特征缩放到某个固定范围
    • 神经网络和深度学习模型

5. 📈 拓展:Min-Max归一化与Z-Score标准化的代码实现

除了前面提到的基本方法,数据处理中的归一化和标准化还有一些其他常见的方式。最常见的就是Min-Max归一化与Z-Score标准化,这两种方法在实际项目中应用非常广泛。以下是两者的代码实现及详细说明。

Min-Max归一化的实现:

# Min-Max归一化的自定义实现
def min_max_normalize(data):
    min_val = np.min(data, axis=0)
    max_val = np.max(data, axis=0)
    normalized_data = (data - min_val) / (max_val - min_val)
    return normalized_data

# 示例数据
data = np.array([[2000, 3.5], 
                 [1500, 4.0], 
                 [1800, 3.8]])

# 进行Min-Max归一化
normalized_data = min_max_normalize(data)

# 打印归一化后的数据
print("自定义Min-Max归一化后的数据:\n", normalized_data)

Z-Score标准化的实现:

# Z-Score标准化的自定义实现
def z_score_standardize(data):
    mean_val = np.mean(data, axis=0)
    std_val = np.std(data, axis=0)
    standardized_data = (data - mean_val) / std_val
    return standardized_data

# 示例数据
data = np.array([[2000, 3.5], 
                 [1500, 4.0], 
                 [1800

, 3.8]])

# 进行Z-Score标准化
standardized_data = z_score_standardize(data)

# 打印标准化后的数据
print("自定义Z-Score标准化后的数据:\n", standardized_data)

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

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

相关文章

用sdkman管理多个jdk切换

前言 最近项目前后端进行升级,需要在jdk8和jdk17两个版本切换。最简单的是通过手动切换,但切换过程太繁琐,修改环境变量,达到切换目的。于是尝试其它解决方案,最终确实使用sdkman工具。 sdkman 是一款面向Java开发者的…

十分钟掌握Ajax(jQuery封装的ajax)

Ajax是一种异步(无需等待服务器返回数据就可以做别的工作)无刷新(做了一些操作之后,页面不会刷新)技术,通常结合DOM一起操作。(不像超链接和表单一样一点就刷新) Jquery封装好的Ajax技术有四种&#xff0c…

苹果开源Depth Pro:0.3秒实现从2D图像到3D深度图的革命性突破

前沿科技速递🚀 近日,苹果公司的AI研究团队震撼推出了一项划时代的技术——Depth Pro。这一技术能够在0.3秒内从单一的2D图像中生成高精度的3D深度图,突破了单目深度估计技术的极限。这项创新将为智能设备和计算机视觉领域带来全新的应用可能…

JavaWeb合集11-Maven高级

十一、Maven高级 1、分模块设计与开发 为什么?将项目按照功能拆分成若干个子模块,方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享。 分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分。 实现步骤&…

mqtt与云服务器

mqtt 目录 mqtt 回顾 云服务器的操作 MQTT协议 -- 将官方库移植到工程 -- 应用 -- 可能会出现的问题: 完整代码 回顾 -- 昨天我们写的AT指令是直接写在main中,在while循环的外面,没有很好的封装,所以今天我们写一个函数…

jeecg3版本的vue,离线启动

jeecg的vue2版本已经停止维护,所以只能用vue3的版本。3版本中使用的是pnpm(npm的增强版本)下载依赖。使用pnpm安装的node_modules,不能直接复制到离线主机中(因为在 pnpm安装过程中,会给依赖的配置文件写死…

qt页面设计

1. Designer 设计师(掌握) Designer是Qt内置的一款界面设计程序,设计的界面文件为.ui格式。 C程序员通常不会单独启动Designer,如果要在项目中使用Designer程序,只需要在新建项目时,勾选“创建界面文件”选…

基于Springboot+Vue的特殊儿童家长教育能力提升平台 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

《数据结构》课程综合设计(zzu校园导航)(迪杰斯特拉算法)

一、系统(问题)描述 目前根据郑州大学主校区面积区域的广大,以及南、北核心教学楼的教室分布密集且较多;另外,多数地图软件无法精细导航到一个具体的地点,容易造成原地转圈的烦恼。但是,我们转…

excel 表格中url转图片

待处理的单元格通过如下公式获取目标格式&#xff1a; "<table><img src"&A4&" height20></table>" 然后下拉后获取多列的单元格转换结果&#xff0c; 然后将这些转换后的结果拷贝到纯文本文档中&#xff0c; 然后再将纯文本…

Ubuntu22.04虚拟机安装

一、安装介质下载&#xff1a; 在官网下载安装镜像&#xff0c;下载地址https://releases.ubuntu.com/22.04/ubuntu-22.04.5-live-server-amd64.iso 二、操作系统安装&#xff1a; step 1:进入ubuntu的安装界面&#xff0c;直接回车安装。 step 2:选择语言&#xff0c;直接回…

pycharm 找不到conda环境

参考&#xff1a;新版Pycharm解决Conda executable is not found-CSDN博客

软件界面设计深度解析:流程、工具与用户体验

1、什么是软件界面 软件界面设计是指对软件的外观和用户体验进行美化、优化和标准化的过程。这包括软件的启动封面、框架、菜单、标签、安装过程、滚动条、状态栏、面板、图标设计&#xff0c;以及软件的包装和商业化设计。简单来说&#xff0c;我们日常使用微信时所看到的聊天…

天锐绿盾VS Ping32数据安全新选择,用户体验分享

随着网络威胁日益严重&#xff0c;如何保护个人和企业的网络安全成为了一个迫在眉睫的问题。天锐绿盾和Ping32作为市场上两款备受欢迎的网络安全软件&#xff0c;各自拥有独特的特点和功能。本文将对这两款软件进行深入的使用体验分享&#xff0c;帮助用户做出最佳选择。 防护性…

C++ 11 的 codecvt 与编码转换

1 编码与乱码 乱码产生的主要原因是编码与字符集不匹配&#xff0c;这种不匹配时怎么造成的呢&#xff1f;首先要来了解一下编码和字符集的关系。 1.1 编码与字符集 由于标准的英文 ASCII 已经成了全球标准&#xff0c;每台电脑的 BIOS 里存着一份标准 ASCII 表&#xff08;…

ES6扩展运算符

1.介绍&#xff1a; ... 扩展运算符能将数组转换为逗号分隔的参数序列&#xff1b; 扩展运算符&#xff08;spread&#xff09;也是三个点&#xff08;...&#xff09;。它好比 rest 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的 参数序列&#xff0c;对数组进…

IP数据包格式、ICMP封装步骤

IP数据包格式 版本号&#xff1a;占4位&#xff0c;表示IP协议的版本&#xff0c;目前广泛使用的是IPv4&#xff0c;其版本号为4。 首部长度&#xff1a;占4位&#xff0c;表示IP首部的长度&#xff0c;单位为32位字节。首部长度最小为20字节&#xff0c;最大为60字节。 服务…

2.Java--入门程序

一、开发Java程序 步骤&#xff1a; 1.编写代码 其中第一行的HelloWorld叫类名&#xff0c;下面的框架叫main()方法&#xff0c; 类名要和文件名一致&#xff0c; 2.编译代码 用Javac进行编译&#xff0c;将编写的代码保存之后&#xff0c;打开WindowsR输入cmd 用cd文件夹…

40系显卡配置Apollo9.0

文章目录 一、下载安装 Apollo 源码1. 克隆 Apollo 源码 二、 启动Apollo环境容器三、 进入Apollo环境四、编译五、启动 Apollo 进行播包验证5.1 获取数据包5.2 启动 Dreamview5.3 在 Dreamview 中播放数据包5.4 通过命令行播放数据包 宿主机基础环境 系统&#xff1a;ubuntu22…

关键词提取技术:TextRank 详解

1. 什么是 TextRank&#xff1f; TextRank 是一种基于图的排序算法&#xff0c;用于从文本中提取关键词和进行自动摘要。它是受 Google 的 PageRank 算法启发而提出的。与 TF-IDF 不同&#xff0c;TextRank 不依赖外部语料库&#xff0c;也不需要训练数据。它通过构建词语之间的…