特征縮放(Feature Scaling)詳解
特征縮放是機器學習數據預處理的關鍵步驟,旨在將不同特征的數值范圍統一到相近的尺度,從而加速模型訓練、提升性能并避免某些特征主導模型。
1. 為什么需要特征縮放?
(1) 問題背景
- 量綱不一致:例如:
- 特征1:年齡(范圍 0-100)
- 特征2:收入(范圍 0-1,000,000)
- 梯度下降的困境:
- 量綱大的特征(如收入)會導致梯度更新方向偏離最優路徑,收斂緩慢。
- 量綱小的特征(如年齡)的權重更新可能被忽略。
(2) 影響
- 模型收斂慢:梯度下降需要更多迭代。
- 某些算法失效:
- 距離類算法(如KNN、SVM)受特征尺度直接影響。
- 正則化模型(如嶺回歸)對未縮放的系數懲罰不均。
2. 常用特征縮放方法
(1) 標準化(Standardization)
- 公式:
[
x’ = \frac{x - \mu}{\sigma}
]- ( \mu ):特征均值,( \sigma ):標準差。
- 結果:數據均值為0,方差為1(服從標準正態分布)。
- 適用場景:大多數算法(如線性回歸、神經網絡)。
Python實現:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
(2) 歸一化(Normalization)
- 公式(Min-Max縮放):
[
x’ = \frac{x - \min(x)}{\max(x) - \min(x)}
] - 結果:數據被壓縮到 [0, 1] 區間。
- 適用場景:圖像像素值、神經網絡輸入層。
Python實現:
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
(3) 魯棒縮放(Robust Scaling)
- 公式:
[
x’ = \frac{x - \text{median}(x)}{\text{IQR}(x)}
]- IQR(四分位距)= Q3 - Q1。
- 特點:抗異常值干擾。
- 適用場景:數據含離群點時。
3. 不同算法的需求
算法類型 | 是否需要特征縮放 | 原因 |
---|---|---|
梯度下降類 | 必須(如線性回歸、神經網絡) | 加速收斂,避免震蕩。 |
距離類(KNN、SVM) | 必須 | 距離計算依賴特征尺度。 |
樹模型(決策樹、隨機森林) | 不需要 | 基于特征排序,不受尺度影響。 |
正則化模型(Lasso/Ridge) | 必須 | 公平懲罰各特征系數。 |
4. 代碼示例對比
未縮放的梯度下降問題
import numpy as np# 未縮放的數據(年齡 vs 收入)
X = np.array([[30, 50000], [40, 60000], [25, 30000]])
y = np.array([1, 2, 0])# 梯度下降(收斂慢)
def gradient_descent(X, y, lr=0.000001, epochs=100):w = np.zeros(X.shape[1])for _ in range(epochs):y_pred = X.dot(w)grad = X.T.dot(y_pred - y) / len(y)w -= lr * gradreturn ww = gradient_descent(X, y) # 需要極小的學習率和大量迭代
縮放后的優化效果
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
X_scaled = scaler.fit_transform(X)w_scaled = gradient_descent(X_scaled, y, lr=0.1) # 學習率更大,收斂更快
5. 注意事項
- 劃分數據后縮放:先拆分訓練集/測試集,僅用訓練集統計量(均值、方差)縮放測試集,避免數據泄漏。
scaler.fit(X_train) # 僅用訓練集計算參數 X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test) # 測試集用相同的scaler
- 分類特征:獨熱編碼后的二元特征通常無需縮放。
- 樹模型例外:決策樹類模型不依賴特征尺度,但縮放有時能提升計算效率。
6. 總結
- 核心目標:消除特征間的量綱差異,使模型公平對待每個特征。
- 方法選擇:
- 默認用標準化(StandardScaler)。
- 數據有界時用歸一化(MinMaxScaler)。
- 含離群點時用魯棒縮放(RobustScaler)。
- 關鍵口訣:
“梯度下降必縮放,距離模型量綱關;
樹模型前可忽略,防漏數據記心間。”