特征缩放(标准化/归一化)超通俗讲解

机器学习必学:特征缩放(标准化/归一化)超通俗讲解

特征缩放是数据预处理最核心、最常用 的一步,专门解决特征量纲不一致、数值差距太大导致模型学不好的问题,本科生、研究生都必须吃透。


一、什么是特征缩放?为什么必须做?

一句话理解

特征缩放 = 把不同大小、不同单位的特征,拉到同一个尺度范围里,让模型公平对待每一个特征。

不做会怎样?

  • 比如一个特征是收入(几万) ,一个是年龄(几十)
  • 模型会觉得:数值大的特征更重要,直接被收入带偏
  • 导致KNN、SVM、逻辑回归、神经网络等模型精度暴跌、收敛极慢

两大类方法

  1. 标准化(Standardization):均值0,标准差1
  2. 归一化(Normalization):缩放到 0,1-1,1

二、标准化(Standardization)Z-Score

核心作用

把数据变成均值=0,标准差=1 的标准分布,更适合数据近似正态分布的场景。

公式(必须记住)

zi=xi−μσz_i = \frac{x_i - \mu}{\sigma}zi=σxi−μ

一步步拆解

  1. 算均值 μ:所有数据的平均值
  2. 算标准差 σ:数据的离散程度
  3. 每个数据减均值,再除以标准差

特点

  • 结果没有固定范围,可正可负
  • 异常值相对鲁棒
  • 适合:SVM、逻辑回归、PCA、神经网络

三、归一化(Normalization)Min-Max

核心作用

把数据线性压缩到 0,1 区间,简单直观。

公式

xi′=xi−xminxmax−xminx_i' = \frac{x_i - x_{min}}{x_{max} - x_{min}}xi′=xmax−xminxi−xmin

一步步拆解

  1. 找该列的最小值 xminx_{min}xmin
  2. 找该列的最大值 xmaxx_{max}xmax
  3. 按比例映射到0~1之间

特点

  • 结果严格落在 0,1
  • 非常怕异常值(一个极端值就毁掉全部)
  • 适合:KNN、K-Means、图像像素(0-255→0-1)

四、标准化 vs 归一化 超清晰对比

项目 标准化(Z-Score) 归一化(Min-Max)
公式 (x-μ)/σ (x-xminx_{min}xmin)/(xmaxx_{max}xmax-xminx_{min}xmin)
输出范围 无固定范围 0,1
异常值影响 较小 很大
数据分布要求 近似正态分布 无要求
适用模型 神经网络、SVM、PCA、逻辑回归 KNN、K-Means、图像数据
常用场景 大多数机器学习任务 要求固定范围的场景

最简单选择口诀

  • 数据有异常值、近似正态 → 用标准化
  • 数据无异常值、需要固定0~1 → 用归一化
  • 不确定用哪个?优先标准化

五、完整实战代码(鸢尾花数据集)

直接复制可运行,包含:加载数据→可视化→标准化→归一化→模型评估。

python 复制代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.neighbors import KNeighborsClassifier

# 1. 加载数据
iris = load_iris()
X = iris.data
y = iris.target
feature_names = iris.feature_names

# 2. 原始数据可视化
plt.figure(figsize=(10,6))
plt.scatter(X[:,0], X[:,1], c=y, cmap='viridis', s=100, edgecolors='k')
plt.title('原始数据:花萼长度 vs 宽度')
plt.xlabel('Sepal Length')
plt.ylabel('Sepal Width')
plt.colorbar()
plt.grid(True)
plt.show()

# 3. 标准化
scaler = StandardScaler()
X_std = scaler.fit_transform(X)

plt.figure(figsize=(10,6))
plt.scatter(X_std[:,0], X_std[:,1], c=y, cmap='viridis', s=100, edgecolors='k')
plt.title('标准化后数据')
plt.xlabel('Std Sepal Length')
plt.ylabel('Std Sepal Width')
plt.colorbar()
plt.grid(True)
plt.show()

# 4. 归一化
mm_scaler = MinMaxScaler()
X_norm = mm_scaler.fit_transform(X)

plt.figure(figsize=(10,6))
plt.scatter(X_norm[:,0], X_norm[:,1], c=y, cmap='viridis', s=100, edgecolors='k')
plt.title('归一化后数据')
plt.xlabel('Norm Sepal Length')
plt.ylabel('Norm Sepal Width')
plt.colorbar()
plt.grid(True)
plt.show()

# 5. 模型对比(KNN必须做特征缩放!)
def evaluate(X, title):
    X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=42)
    model = KNeighborsClassifier()
    model.fit(X_train,y_train)
    acc = accuracy_score(y_test, model.predict(X_test))
    print(f'{title} 准确率:{acc:.4f}')

evaluate(X, '原始数据')
evaluate(X_std, '标准化')
evaluate(X_norm, '归一化')

六、哪些模型必须做特征缩放?

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

  • KNN、K-Means(基于距离
  • SVM(距离度量+核函数敏感
  • 线性回归、逻辑回归(梯度下降敏感
  • 神经网络、PCA、LDA、梯度下降类算法

❌ 不用做(几乎无影响)

  • 决策树、随机森林、XGBoost、LightGBM
  • 树模型只看分裂规则,不看数值大小

七、特征缩放优缺点

优点

  1. 提升模型精度,避免大数值特征主导模型
  2. 加速收敛,梯度下降更快更稳
  3. 避免数值溢出/梯度消失
  4. 距离类算法正常工作

缺点

  1. 树模型无用,白算算力
  2. 归一化极度怕异常值
  3. 会丢失原始量纲信息
  4. 高维大数据会增加少量计算开销

八、总结(面试/论文必背版)

  1. 特征缩放 = 统一特征尺度,距离类模型必做
  2. 标准化:均值0,标准差1,通用首选
  3. 归一化:缩放到0~1,适合无异常值、固定范围场景
  4. 不确定用哪个?直接用标准化
  5. KNN、SVM、神经网络必做;树模型不用做
相关推荐
Rocky Ding*7 小时前
【三年面试五年模拟】阿里巴巴-千问技术部算法一面全解析
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·ai agent
xx_xxxxx_7 小时前
论文阅读-REINFORCE++与Lessons of Developing PRMs
人工智能·深度学习·机器学习·强化学习
古希腊掌管代码的神THU7 小时前
【清华代码熊】DeepSeek-V4.1-Flash 多模态架构解析
人工智能·深度学习·机器学习·自然语言处理·面试
tellmewhoisi8 小时前
机器学习:线性回归4(欠拟合,正好拟合,过拟合)
机器学习
人邮异步社区9 小时前
入门机器学习从理论开始还是从实战开始?
人工智能·深度学习·机器学习
梦想的初衷~9 小时前
AI赋能生态遥感:Python无人机三维建模、特征融合与机器学习建模全流程
机器学习·无人机遥感·土地利用分类·生态三维建模·python生态建模·ai遥感·碳储量估算
Rocky Ding*10 小时前
【三年面试五年模拟】2026-09-10 百度多模态大模型一面:9道技术问答与2道手撕题详解
论文阅读·人工智能·深度学习·机器学习·百度·aigc·ai-native
Omics Pro10 小时前
AI药物研发10原则!欧盟EMA×美国FDA
数据库·人工智能·算法·机器学习·自然语言处理
cxk180827210 小时前
2026 GEO 优化实战指南:精采信时代昆明 AI 营销服务商选型方法论
大数据·人工智能·机器学习·geo·昆明geo
tellmewhoisi10 小时前
机器学习:集成学习3(GBDT算法api调用)
机器学习