机器学习数据预处理:数据标准化(Z-Score)

机器学习数据预处理:数据标准化(Z-Score)超通俗全解

数据标准化是**把所有特征统一变成“均值为0,标准差为1”**的最经典预处理方法,彻底解决量纲不一致、数值差距大的问题,所有对尺度敏感的模型都必须做


一、什么是数据标准化?为什么一定要做?

1. 一句话理解

标准化 = 把数据变成标准正态分布,让所有特征在同一个“起跑线”上。

2. 不做标准化会怎样?

  • 身高(150-200)、体重(30-100)、收入(几千-几百万)数值差距巨大
  • 模型会被数值大的特征带偏,认为它更重要
  • KNN、SVM、神经网络、线性回归等模型精度暴跌、收敛极慢

3. 标准化的3大作用

  1. 消除量纲影响:不同单位、不同范围的特征可公平比较
  2. 加速模型收敛:梯度下降跑得更快更稳
  3. 提升模型精度:避免大数值特征主导模型

二、最核心方法:Z-Score 标准化

1. 公式(必须背会)

z=x−μσz = \frac{x-\mu}{\sigma}z=σxμ

2. 符号解释

  • x:原始数据
  • μ(mu):这一列特征的均值
  • σ(sigma):这一列特征的标准差
  • z:标准化后的值(大部分落在 [-3, 3]

3. 直观计算例子

原始分数:70、80、90

  1. 均值 μ = (70+80+90)/3 = 80
  2. 标准差 σ ≈ 8.165
  3. 计算:
    • 70 → (70-80)/8.165 ≈ -1.225
    • 80 → (80-80)/8.165 = 0
    • 90 → (90-80)/8.165 ≈ +1.225

结果:数据以0为中心,表示距离平均值多少个标准差。


三、数学推导(论文/面试必备)

1. 目标

变换后满足:

  • 均值 = 0
  • 方差 = 1
  • 标准差 = 1

2. 推导步骤

  1. 中心化:x’ = x - μ → 均值变为0
  2. 标准化:z = x’ / σ → 标准差变为1

最终得到:
zi=xi−μσz_i = \frac{x_i-\mu}{\sigma}zi=σxiμ


四、标准化 vs 归一化(最易混淆)

方法公式输出范围异常值影响适用场景
标准化(Z-Score)(x-μ)/σ无固定,约[-3,3]大多数模型、正态分布、梯度下降
归一化(Min-Max)(x-min)/(max-min)[0,1]非常大图像、固定范围、KNN

最简单选择口诀

  • 有异常值、数据偏态 → 用标准化
  • 需要0~1范围 → 用归一化
  • 不知道用啥 → 直接用标准化

五、完整可运行代码(含4张可视化图)

包含:数据生成、标准化、直方图、散点图、Q-Q图检验正态性。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import scipy.stats as stats

# 生成模拟成绩数据
np.random.seed(42)
data = np.random.normal(loc=80, scale=10, size=100)

# Z-Score 标准化
mu = np.mean(data)
sigma = np.std(data)
z_data = (data - mu) / sigma

# 绘图:4张图对比
fig, axes = plt.subplots(2, 2, figsize=(16, 10))
fig.suptitle("Data Standardization (Z-Score) Analysis", fontsize=20)

# 1. 原始数据分布
sns.histplot(data, kde=True, color="coral", ax=axes[0,0])
axes[0,0].set_title("原始数据分布")
axes[0,0].set_xlabel("分数")

# 2. 标准化后分布
sns.histplot(z_data, kde=True, color="mediumseagreen", ax=axes[0,1])
axes[0,1].set_title("标准化数据分布")
axes[0,1].set_xlabel("Z-Score")

# 3. 原始 vs 标准化 散点图
axes[1,0].scatter(data, z_data, color="orchid", s=100, alpha=0.7, edgecolors='black')
m, b = np.polyfit(data, z_data, 1)
axes[1,0].plot(data, m*data + b, 'k--')
axes[1,0].set_title("原始数据 ↔ 标准化数据")
axes[1,0].set_xlabel("原始")
axes[1,0].set_ylabel("标准化")

# 4. Q-Q图检验正态性
stats.probplot(z_data, dist="norm", plot=axes[1,1])
axes[1,1].get_lines()[0].set_color('gold')
axes[1,1].get_lines()[1].set_color('red')
axes[1,1].set_title("Q-Q 正态性检验")

plt.tight_layout()
plt.show()

六、哪些模型必须做标准化?

✅ 必须做(不做效果极差)

  • KNN、K-Means(基于距离)
  • SVM(支持向量机)
  • 线性回归、逻辑回归
  • 神经网络、PCA、梯度下降类算法

❌ 不用做(树模型)

  • 决策树、随机森林、XGBoost、LightGBM

七、总结(面试/笔记速背版)

  1. 标准化 = 均值0,标准差1,消除量纲影响
  2. 公式:z = (x-μ)/σ
  3. 对异常值更鲁棒,通用首选
  4. 距离/线性/神经网络模型必做,树模型不用做
  5. 标准化不改变分布形状,只改变尺度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeepModel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值