机器学习初学者 02月03日
【机器学习】通透!数据标准化与归一化 !!
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细介绍了数据标准化和归一化的概念、区别及应用场景。标准化通过调整数据使其均值为0,标准差为1,适用于对数据分布敏感的算法,如PCA和SVM。归一化则将数据缩放到特定区间,通常是[0,1],适用于特征范围差异大的情况,如神经网络。文章通过公式、对比表格和代码示例,清晰地阐述了两种方法的原理、优缺点和适用场景。选择哪种方法取决于具体的算法需求和数据特点,标准化更鲁棒,归一化则能保留原始比例关系。最后,文章还提供了完整的数据处理案例,帮助读者理解并应用这两种方法。

📊 **定义与公式**: 数据标准化将数据转换为均值为0、标准差为1的标准正态分布,而数据归一化则将数据按比例缩放到特定区间,通常为[0,1]或[-1,1]。

🎯 **适用场景**: 标准化适用于对数据分布敏感的算法,如PCA、线性回归和基于距离的算法;归一化适用于特征值范围差异显著,避免较大值特征对模型的主导性影响,常用于深度学习。

⚖️ **优缺点对比**: 标准化对异常值较为鲁棒,提升基于分布假设的模型表现,但会失去原始物理意义;归一化操作简单,范围固定,适合快速收敛的场景,但对异常值敏感。

📈 **完整案例**: 文章通过Python代码演示了如何使用`StandardScaler`进行标准化和`MinMaxScaler`进行归一化,并可视化了处理前后数据的分布和箱线图。

cos大壮 2025-02-03 11:01 浙江

数据标准化与归一化的区别与应用场景。

今儿和大家聊一个简单的话题:数据标准化与归一化的区别与应用场景。

好像很简单,但是为了更加的清晰,从各方面和大家详细的聊聊~

数据标准化与数据归一化

数据标准化(Standardization)

其中  是原始数据, 是均值, 是标准差。

数据归一化(Normalization)

其中  和  分别为数据的最小值和最大值。

对比项标准化(Standardization)归一化(Normalization)
核心目标均值为 0,标准差为 1缩放数据到固定区间
公式参数均值和标准差数据最小值和最大值
结果分布标准正态分布固定区间的比例缩放

适用场景

数据标准化的适用场景

    机器学习算法对分布敏感:标准化适合需要数据服从正态分布的算法,例如:

基于距离的算法:如 K-Means、支持向量机(SVM),需要平衡不同量纲特征的影响。

数据归一化的适用场景

    特征值范围差异显著:归一化适合数据范围差异大的场景,避免较大值特征对模型的主导性影响。

    深度学习:神经网络通常以归一化的数据为输入,便于梯度下降优化快速收敛。

算法类型推荐方法原因
PCA、回归分析标准化需要均值为 0,标准差为 1 的特征分布
KNN、SVM、K-Means标准化平衡不同量纲特征的距离权重
神经网络、梯度下降优化归一化小范围特征更便于快速迭代

优缺点

数据标准化的优缺点

    对异常值较为鲁棒(异常值不会像归一化那样对比例造成较大干扰)。

    提升基于分布假设的模型表现(如 PCA、回归分析)。

缺点

    转换后的数据失去了原始的物理意义(如温度、价格等直观性)。

    对非高斯分布的数据可能效果较差。

数据归一化的优缺点

    操作简单,范围固定,适合快速收敛的场景(如神经网络)。

    能保留数据间比例关系。

缺点

    对异常值敏感,异常值可能过度影响缩放范围。

    不适用于需要正态分布假设的模型。

完整案例

我们使用一个示例数据集,包含两个特征范围差异明显的列。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler, MinMaxScaler
# 创建数据集
np.random.seed(42)
data = {
    "Feature1": np.random.randint(110050),  # 范围较大
    "Feature2": np.random.rand(50) * 10,       # 范围较小
}
df = pd.DataFrame(data)
# 原始数据分布
plt.figure(figsize=(124))
plt.subplot(121)
plt.hist(df["Feature1"], bins=10, alpha=0.7, label="Feature1")
plt.hist(df["Feature2"], bins=10, alpha=0.7, label="Feature2")
plt.title("Original Data Distribution")
plt.legend()
plt.subplot(122)
plt.boxplot([df["Feature1"], df["Feature2"]], labels=["Feature1""Feature2"])
plt.title("Original Data Boxplot")
plt.show()

标准化与归一化实现

# 标准化
scaler_std = StandardScaler()
df_std = pd.DataFrame(scaler_std.fit_transform(df), columns=["Feature1""Feature2"])
# 归一化
scaler_norm = MinMaxScaler()
df_norm = pd.DataFrame(scaler_norm.fit_transform(df), columns=["Feature1""Feature2"])
# 可视化比较
plt.figure(figsize=(126))
# 标准化后的分布
plt.subplot(221)
plt.hist(df_std["Feature1"], bins=10, alpha=0.7, label="Feature1")
plt.hist(df_std["Feature2"], bins=10, alpha=0.7, label="Feature2")
plt.title("Standardized Data Distribution")
plt.legend()
# 归一化后的分布
plt.subplot(222)
plt.hist(df_norm["Feature1"], bins=10, alpha=0.7, label="Feature1")
plt.hist(df_norm["Feature2"], bins=10, alpha=0.7, label="Feature2")
plt.title("Normalized Data Distribution")
plt.legend()
# 标准化后的箱线图
plt.subplot(223)
plt.boxplot([df_std["Feature1"], df_std["Feature2"]], labels=["Feature1""Feature2"])
plt.title("Standardized Data Boxplot")
# 归一化后的箱线图
plt.subplot(224)
plt.boxplot([df_norm["Feature1"], df_norm["Feature2"]], labels=["Feature1""Feature2"])
plt.title("Normalized Data Boxplot")
plt.show()

    原始数据分布显示了两个特征的范围差异。

    标准化后,数据呈现均值为 0,标准差为 1 的分布;归一化后,数据被压缩到 [0,1] 的区间。

总结一下:

异同点

选择建议

最后

大家有问题可以直接在评论区留言即可~

喜欢本文的朋友可收藏、点赞、转发起来!


阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

数据标准化 数据归一化 特征工程 机器学习 数据预处理
相关文章