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

张开发
2026/4/21 21:53:17 15 分钟阅读

分享文章

特征缩放(标准化/归一化)超通俗讲解
机器学习必学特征缩放标准化/归一化超通俗讲解特征缩放是数据预处理最核心、最常用的一步专门解决特征量纲不一致、数值差距太大导致模型学不好的问题本科生、研究生都必须吃透。一、什么是特征缩放为什么必须做一句话理解特征缩放 把不同大小、不同单位的特征拉到同一个尺度范围里让模型公平对待每一个特征。不做会怎样比如一个特征是收入几万一个是年龄几十模型会觉得数值大的特征更重要直接被收入带偏导致KNN、SVM、逻辑回归、神经网络等模型精度暴跌、收敛极慢两大类方法标准化Standardization均值0标准差1归一化Normalization缩放到 [0,1] 或 [-1,1]二、标准化StandardizationZ-Score核心作用把数据变成均值0标准差1的标准分布更适合数据近似正态分布的场景。公式必须记住zixi−μσz_i \frac{x_i - \mu}{\sigma}zi​σxi​−μ​一步步拆解算均值 μ所有数据的平均值算标准差 σ数据的离散程度每个数据减均值再除以标准差特点结果没有固定范围可正可负对异常值相对鲁棒适合SVM、逻辑回归、PCA、神经网络三、归一化NormalizationMin-Max核心作用把数据线性压缩到 [0,1]区间简单直观。公式xi′xi−xminxmax−xminx_i \frac{x_i - x_{min}}{x_{max} - x_{min}}xi′​xmax​−xmin​xi​−xmin​​一步步拆解找该列的最小值xminx_{min}xmin​找该列的最大值xmaxx_{max}xmax​按比例映射到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→ 用归一化不确定用哪个优先标准化五、完整实战代码鸢尾花数据集直接复制可运行包含加载数据→可视化→标准化→归一化→模型评估。importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfromsklearn.datasetsimportload_irisfromsklearn.preprocessingimportStandardScaler,MinMaxScalerfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_scorefromsklearn.neighborsimportKNeighborsClassifier# 1. 加载数据irisload_iris()Xiris.data yiris.target feature_namesiris.feature_names# 2. 原始数据可视化plt.figure(figsize(10,6))plt.scatter(X[:,0],X[:,1],cy,cmapviridis,s100,edgecolorsk)plt.title(原始数据花萼长度 vs 宽度)plt.xlabel(Sepal Length)plt.ylabel(Sepal Width)plt.colorbar()plt.grid(True)plt.show()# 3. 标准化scalerStandardScaler()X_stdscaler.fit_transform(X)plt.figure(figsize(10,6))plt.scatter(X_std[:,0],X_std[:,1],cy,cmapviridis,s100,edgecolorsk)plt.title(标准化后数据)plt.xlabel(Std Sepal Length)plt.ylabel(Std Sepal Width)plt.colorbar()plt.grid(True)plt.show()# 4. 归一化mm_scalerMinMaxScaler()X_normmm_scaler.fit_transform(X)plt.figure(figsize(10,6))plt.scatter(X_norm[:,0],X_norm[:,1],cy,cmapviridis,s100,edgecolorsk)plt.title(归一化后数据)plt.xlabel(Norm Sepal Length)plt.ylabel(Norm Sepal Width)plt.colorbar()plt.grid(True)plt.show()# 5. 模型对比KNN必须做特征缩放defevaluate(X,title):X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.2,random_state42)modelKNeighborsClassifier()model.fit(X_train,y_train)accaccuracy_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树模型只看分裂规则不看数值大小七、特征缩放优缺点优点提升模型精度避免大数值特征主导模型加速收敛梯度下降更快更稳避免数值溢出/梯度消失让距离类算法正常工作缺点对树模型无用白算算力归一化极度怕异常值会丢失原始量纲信息高维大数据会增加少量计算开销八、总结面试/论文必背版特征缩放 统一特征尺度距离类模型必做标准化均值0标准差1通用首选归一化缩放到0~1适合无异常值、固定范围场景不确定用哪个直接用标准化KNN、SVM、神经网络必做树模型不用做

更多文章