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

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

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


目录

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

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

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

例如:

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

常见的问题包括:

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

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


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

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

数据标准化公式:

标准化的公式如下所示:

实例代码:

python 复制代码
# 导入必要的库
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]。归一化适用于数值范围差异较大的数据,或者当我们希望特征值的影响被均匀分布在某个区间时。归一化后的数据能够避免特征数值较大对模型训练造成的干扰。

数据归一化公式:

归一化的公式如下所示:

实例代码:

python 复制代码
# 导入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归一化的实现:

python 复制代码
# 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标准化的实现:

python 复制代码
# 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)
相关推荐
kaixin_啊啊24 分钟前
头歌——机器学习(逻辑回归)
机器学习
武子康27 分钟前
大数据-210 数据挖掘 机器学习理论 - 逻辑回归 scikit-learn 实现 penalty solver
大数据·人工智能·python·机器学习·数据挖掘·逻辑回归·scikit-learn
尘浮生28 分钟前
Java项目实战II基于Spring Boot的智慧生活商城系统的设计与实现(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·mysql·maven·生活
weixin_5182850528 分钟前
深度学习笔记9-实现逻辑回归
人工智能·笔记·深度学习·机器学习
结衣结衣.1 小时前
【Linux】Linux管道揭秘:匿名管道如何连接进程世界
linux·运维·c语言·数据库·操作系统
周末不下雨1 小时前
跟着小土堆学习pytorch(六)——神经网络的基本骨架(nn.model)
pytorch·神经网络·学习
区块链蓝海1 小时前
机器人助力Bridge Champ游戏:1.4.2版本如何提升玩家体验
大数据·人工智能
云水木石1 小时前
对标 Windows Copilot 的 UOS AI,升级后更能打了
人工智能·copilot
安祝老师1 小时前
十四届蓝桥杯STEMA考试Python真题试卷第二套第二题
开发语言·python·算法·青少年编程·蓝桥杯
立黄昏粥可温2 小时前
Python 从入门到实战44(Pandas读写数据)
开发语言·python·pandas