机器学习中的数据标准化与归一化:概念、应用场景及区别
创作时间:
作者:
@小白创作中心
机器学习中的数据标准化与归一化:概念、应用场景及区别
引用
CSDN
1.
https://m.blog.csdn.net/fengdu78/article/details/145435578
数据标准化与数据归一化
数据标准化(Standardization)
定义:标准化是将数据转换为具有均值为 0 和标准差为 1 的标准正态分布。
数学公式:
其中 是原始数据, 是均值, 是标准差。
- 操作结果:经过标准化的数据没有单位限制,更适合基于距离或分布的算法。
数据归一化(Normalization)
定义:归一化是将数据按比例缩放到特定区间(通常为 [0,1] 或 [-1,1])。
数学公式:
其中 和 分别为数据的最小值和最大值。
- 操作结果:归一化后的数据保留了原始数值范围的比例关系。
对比项 | 标准化(Standardization) | 归一化(Normalization) |
|---|---|---|
核心目标 | 均值为 0,标准差为 1 | 缩放数据到固定区间 |
公式参数 | 均值和标准差 | 数据最小值和最大值 |
结果分布 | 标准正态分布 | 固定区间的比例缩放 |
适用场景
数据标准化的适用场景
- 机器学习算法对分布敏感:标准化适合需要数据服从正态分布的算法,例如:
- 主成分分析(PCA):需要将数据投影到低维空间时,假定变量具有相同的尺度。
- 线性回归、逻辑回归:模型对特征分布敏感,标准化能提升收敛速度和准确性。
基于距离的算法:如 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(1, 100, 50), # 范围较大
"Feature2": np.random.rand(50) * 10, # 范围较小
}
df = pd.DataFrame(data)
# 原始数据分布
plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
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(1, 2, 2)
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=(12, 6))
# 标准化后的分布
plt.subplot(2, 2, 1)
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(2, 2, 2)
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(2, 2, 3)
plt.boxplot([df_std["Feature1"], df_std["Feature2"]], labels=["Feature1", "Feature2"])
plt.title("Standardized Data Boxplot")
# 归一化后的箱线图
plt.subplot(2, 2, 4)
plt.boxplot([df_norm["Feature1"], df_norm["Feature2"]], labels=["Feature1", "Feature2"])
plt.title("Normalized Data Boxplot")
plt.show()
- 原始数据分布显示了两个特征的范围差异。
- 标准化后,数据呈现均值为 0,标准差为 1 的分布;归一化后,数据被压缩到 [0,1] 的区间。
总结
异同点
- 共同点:两者都解决了不同量纲特征之间的权重不均问题。
- 不同点:标准化基于均值和标准差调整分布;归一化基于最大值和最小值调整范围。
选择建议
- 标准化:当算法对分布敏感或需要标准正态分布时(如 PCA、SVM、回归分析)。
- 归一化:当特征范围差异大,且需要固定区间范围时(如神经网络、梯度下降优化)。
热门推荐
二月革命:推翻罗曼诺夫王朝的资产阶级革命
复方石韦胶囊的功效与作用
重磅发布:初中尖子生在高中变成差生的六大原因提示许多高一家长应该这样做!
空气循环扇的优缺点_如何选购_功能使用_拆洗方法_故障维修知识大全
循环扇和普通风扇区别:空气循环扇和普通的风扇有什么区别?详解
揭秘白癜风饮食禁忌:科学忌口,助力肌肤重焕光彩
造影是什么检查
占位符究竟是什么?
南昌至长沙旅行指南:穿越古迹与自然的双城记
人人能看得懂的“借贷记账”法
慢火细炖,土豆与牛肉的完美邂逅——家庭版土豆炖牛肉秘籍
Docker容器性能优化指南:资源限制、健康检查与缓存策略
一篇教程搞定Windows系统中的Docker应用安装
披萨饼皮的做法教程(这样和面,饼皮松软)
尿酸高的人能吃荞麦面吗?医生的专业解答来了
寺庙祈福,双手合十的瞬间
Excel月进度计划表格制作完整指南
金属冶炼过程中的电解与电镀技术
高考最后一周的学习计划及作息时间
五子棋小游戏
大学体测免测有分数吗 具体怎么算
反转在这里?曾被所有崩铁玩家认为是小丑的BOSS冥火大公,竟然活了
喜欢蹲着,是气血不足?这些看似休息暗耗气血的习惯,别再做了!
躺、卧太久也伤心脏
优化秘诀:Zigbee网络稳定性提升的八大技巧
电脑清理后,如何判断硬件是否安装正确?
晚上坚持这8个习惯,第二天不会疲倦和迷茫!
电器耗电量到底怎么计算?教你算出每天的电费!
灵武市司法局马家滩司法所:“导、防、解”三字诀助力农民工维权
如何高效地查询税务登记信息