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

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

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


目录

  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)

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

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

相关文章

大数据开发基础实训室设备

大数据实验实训一体机 大数据实验教学一体机是一种专为大数据教育设计的软硬件融合产品,其基于华为机架服务器进行了调优设计,从而提供了卓越的性能和稳定性。这一产品将企业级虚拟化管理系统与实验实训教学信息化平台内置于一体,通过软硬件…

【超详细】TCP协议

TCP(Transmission Control Protocol 传输控制协议) 传输层协议有连接可靠传输面向字节流 为什么TCP是传输控制协议呢? 我们以前所看到的write接口,都是把用户级缓冲区的数据拷贝到发送缓冲区中,然后数据就由TCP自主决定了,所以…

番茄工作法计时器:高效时间管理利器

《番茄工作法计时器:高效时间管理利器》 在快节奏的现代生活中,高效管理时间成为每个人的迫切需求。今天,我们为你推荐一款强大的番茄工作法计时器。 这款计时器设计简洁,操作便捷,仅有两个按钮 —— 工作 25 分钟和休…

【未公开0day】RaidenMAILD CVE-2024-32399 路径穿越漏洞【附poc下载】

免责声明:本文仅用于技术学习和讨论。请勿使用本文所提供的内容及相关技术从事非法活动,若利用本文提供的内容或工具造成任何直接或间接的后果及损失,均由使用者本人负责,所产生的一切不良后果均与文章作者及本账号无关。 fofa语…

【C++】创建TCP服务端

实现了一个基本的 TCP 服务器&#xff0c;可以接受多个客户端连接&#xff0c;然后持续接收客户端发送的信息&#xff0c; 最后将接收到的信息再发送回客户端 。 源码 头文件&#xff08;TCPServerTest.h&#xff09; #include <iostream> #include <winsock2.h&g…

Idea序列图插件-SequenceDiagram Core

&#x1f496;简介 SequenceDiagram Core 是一个 IntelliJ IDEA 插件&#xff0c;它允许开发者直接在 IDE中创建和编辑序列图&#xff08;Sequence Diagrams&#xff09;。序列图是 UML&#xff08;统一建模语言&#xff09;中的一种图表类型&#xff0c;用于描述对象之间如何…

【Java 22 | 10】 深入解析Java 22 :Vector API 增强特性

Java 22 对 Vector API 进行了重要增强&#xff0c;旨在提供更高效的矢量操作能力&#xff0c;以支持性能关键的应用程序。Vector API 允许开发者利用硬件的 SIMD&#xff08;单指令多数据&#xff09;特性&#xff0c;从而在处理数组和集合等数据时显著提高性能。 1. 基础介绍…

谷歌-BERT-第一步:模型下载

1 需求 需求1&#xff1a;基于transformers库实现自动从Hugging Face下载模型 需求2&#xff1a;基于huggingface-hub库实现自动从Hugging Face下载模型 需求3&#xff1a;手动从Hugging Face下载模型 2 接口 3.1 需求1 示例一&#xff1a;下载到默认目录 from transform…

微带传输线 - 本征模 - Alpha 衰减常数与S21插损_CST软件案例

关于Beta之前的文章解释了很多&#xff0c;这期说说Alpha。α 是衰减常数&#xff08;attenuation constant&#xff09;&#xff0c;表示波损耗&#xff0c;和S21插损相关&#xff0c;但这几个量很多人还是搞不清楚。 首先&#xff0c;S21和插损Insertion Loss严格上讲是不一…

Spring Boot与JavaWeb协同:在线考试系统的实现“

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于JavaWeb技术的在线考试系统设计与实现…

请求参数中字符串的+变成了空格

前端请求 后端接收到的结果 在URL中&#xff0c;某些字符&#xff08;包括空格、、&、? 等&#xff09;需要被编码。具体而言&#xff0c;在URL中&#xff0c;空格通常被编码为 或 %20。因此&#xff0c;如果你在请求参数中使用 &#xff0c;它会被解释为一个空格。 如果…

【C++贪心】2086. 喂食仓鼠的最小食物桶数|1622

本文涉及知识点 C贪心 LeetCode2086. 喂食仓鼠的最小食物桶数 给你一个下标从 0 开始的字符串 hamsters &#xff0c;其中 hamsters[i] 要么是&#xff1a; ‘H’ 表示有一个仓鼠在下标 i &#xff0c;或者’.’ 表示下标 i 是空的。 你将要在空的位置上添加一定数量的食物桶…

QUIC(Quick UDP Internet Connections)与 RTMP(Real Time Messaging Protocol)

QUIC&#xff08;Quick UDP Internet Connections&#xff09;和 RTMP&#xff08;Real Time Messaging Protocol&#xff09;是两种不同的网络传输协议&#xff0c;它们在一些方面有不同的特点和应用场景。 QUIC 协议 特点 基于 UDP&#xff1a;QUIC 建立在 UDP 之上&#xff…

unity静态批处理

unity静态批处理 静态批处理要求和兼容性渲染管线兼容性 使用静态批处理在构建时进行静态批处理在构建时执行静态批处理的步骤&#xff1a; 在运行时进行静态批处理性能影响 静态批处理 静态批处理是一种绘制调用批处理方法&#xff0c;它将不移动的网格组合在一起&#xff0c…

合并与变形

目录 合并 准备数据 append关键字 concat关键字 merge关键字 join关键字 变形 df.T行列转置 透视表 合并 很多情况下需要将多个df合并为一个新的df df1.append(df2) 纵向合并数据集 pd.concat([df1, df2, ...]) 横向或纵向合并数据集&#xff0c;df1和df2可以没有任何…

企业微信开放平台注册流程

目录 网址 注册步骤 准备工作 填写信息 微信认证 填写发票 支付费用 完成注册 网址 微信开放平台&#xff1a; https://open.weixin.qq.com/ 注册步骤 准备工作 企业版&#xff1a; 没有注册过微信其他平台&#xff08;如&#xff1a;微信小程序&#xff0c;微信公众…

澳鹏干货 | 大语言模型的上下文窗口 (Context Windows)

大语言模型&#xff08;LLMs&#xff09;极大地提升了人工智能在理解和生成文本方面的能力。其中一个影响其效用的重要方面是“上下文窗口”&#xff08;Context Windows&#xff09;—— 这个概念直接影响着模型接收和生成语言的有效性。 本期澳鹏干货将深入探讨上下文窗口对…

【MySQL】增删改查-进阶(一)

目录 &#x1f334;数据库约束 &#x1f6a9;约束类型 &#x1f6a9;NOT NULL &#x1f6a9;UNIQUE &#x1f6a9;DEFAULT &#x1f6a9;PRIMARY KEY &#x1f6a9;FOREIGN KEY &#x1f6a9;CHECK &#x1f384;表的设计 &#x1f6a9;一对一 &#x1f6a9;一对多 …

JavaWeb合集07-MyBatis

七、MyBatis MyBatis是一款优秀的持久层&#xff08;dao&#xff09;框架&#xff0c;用于简化JDBC的开发。 MyBatis本是Apache的一个开源项目iBatis, 2010年这个项目由apache迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。 官网&#xff1a;https://mybati…

人工智能学习框架的探索与应用

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…