1. 為什么要做特征歸一化/標準化?
數據預處理中,通常會用到特征歸一化,為什么要做歸一化呢?一般有兩點:
消除特征間單位和尺度差異的影響
特征間的單位(尺度)可能不同。比如身高和體重,比如攝氏度和華氏度,比如房屋面積和房間數,一個特征的變化范圍可能是[1000, 10000],另一個特征的變化范圍可能是[-0.1, 0.2],在進行距離有關的計算時,單位的不同會導致計算結果的不同,尺度大的特征會起決定性作用,而尺度小的特征其作用可能會被忽略,為了消除特征間單位和尺度差異的影響,以對每維特征同等看待,需要對特征進行歸一化。-
加速模型收斂速度
原始特征下,因尺度差異,其損失函數的等高線圖可能是橢圓形,梯度方向垂直于等高線,下降會走zigzag路線,而不是指向local minimum。通過對特征進行zero-mean and unit-variance變換后,其損失函數的等高線圖更接近圓形,梯度下降的方向震蕩更小,收斂更快,如下圖所示,圖片來自Andrew Ng。
圖1
2. 常用的feature scaling方法
待補充。
3. 什么情況下需要做歸一化?
- 涉及或隱含距離計算的算法,比如K-means、KNN、PCA、SVM等
- 損失函數中有正則項,比如
正則,目的也是為了消除不同特征的差異
- 梯度下降優(yōu)化算法。
模型收斂的速度取決于參數的初始位置到local minima的距離,以及學習率的大小。收斂意味著在每個參數維度上都取得極小值,每個參數維度上的偏導數都為0,但是每個參數維度上的下降速度是不同的,為了每個維度上都能收斂,學習率應取所有維度在當前位置合適步長中最小的那個(學習率是多維度共享的)。
不需要做歸一化的情況
- 與距離計算無關的概率模型,不需要feature scaling,比如Naive Bayes;
- 與距離計算無關的基于樹的模型,不需要feature scaling,比如決策樹、隨機森林等,樹中節(jié)點的選擇只關注當前特征在哪里切分對分類更好,即只在意特征內部的相對大小,而與特征間的相對大小無關。
