特徵工程是機器學習中非常重要的一個環節,業內有句話是這麼說的 “ 數據決定了機器學習的上限,而算法和模型是逼近這個上限 ”。可見數據是機器學習的關鍵所在,而特徵工程就是處理數據,因此特徵工程的做的好壞往往直接影響了最終的結果。而特徵工程裏非常重要的兩個步驟就是對特徵的歸一化和標準化。
一、歸一化、標準化、中心化的概念
1、歸一化
將數據映射到 [0,1] 或者 [-1, 1] 區間,一來可以方便計算,二來可以消除不同特徵量綱的影響,無量綱化可以直接純數值計算
2、標準化
標準化是將數據映射爲均值是0,標準差是1的正態分佈數據,該方法常用於SVM,LR,神經網絡等模型中。
3、中心化
中心化相比於標準化更簡單一些,只將數據映射到均值爲0的新數據中,無需滿足標準差爲1的條件。
歸一化和標準化的區別
-
不同
(1)、首先從兩者的定義上可以看出不一樣;
(2)、其次歸一化後的值只受原樣本數據裏的極值影響,而標準化後映射的值受原數據裏每一個樣本的影響。
(3)、標準化是對特徵矩陣裏的列數據做處理,通過 z-score 變換轉爲標準正態分佈數據,和整體樣本分佈相關。 -
相同
(1)、都是消除了量綱的影響
(2)、都是一種線性變換,都是對向量 按照比例壓縮再進行平移
二、爲什麼要歸一化/標準化
爲什麼要做歸一化和標準化,其實前面的內容也提到了一些,不重複贅述。其實歸一化和標準化本質上是一種線性變換,它並沒有改變數據的數值順序,因此不會使數據 “失效”。總的來說,歸一化/標準化的原因可以歸結如下幾點:
(1)、消除量綱的影響
例如身高體重都是影響某種疾病的可能因素,但不能直接對這倆因素加減,通過分別歸一化後轉爲無量綱的數值,即可進行數值運算。
(2)、避免數值問題
在訓練模型參數時,如果某個特徵的值特別大,那邊這個值對模型的影響可能就比較大,訓練出的模型參數會與實際情況有所偏差,歸一化/標準化後,數值會限定在某一個範圍內,避免了極值的影響。
(3)、某些模型的要求
- 在使用梯度下降法求解參數的時候,如果特徵進行了歸一化/標準化,那麼在迭代求解的時候會加快收斂速度
- 一些分類器需要計算樣本之間的距離(如歐氏距離),例如 KNN。如果一個特徵值域範圍非常大,那麼距離計算就主要取決於這個特徵,從而與實際情況相悖(比如這時實際情況是值域範圍小的特徵更重要)。
三、常見的歸一化/標準化方法
3.1 歸一化方法
3.1.1 Min-Max Normalization
3.1.2 平均歸一化
這兩種歸一化方法都有一個問題,就是當有新的數據加入時,極大極小值可能發生變化。
3.1.3 非線性歸一化
- 對數函數轉換:
- 反正切函數轉換:
這種方法通常用於數據分化較大的場景,有些數值很大,有些則很小,利用一些數學函數進行映射。
3.2 標準化方法
3.2.1 Z-score規範化
3.3 中心化方法
四、使用場景
那究竟什麼時候用歸一化?什麼時候用標準化?
- 如果對輸出結果範圍有要求,用歸一化。
- 如果數據較爲穩定,不存在極端的最大最小值,用歸一化。
- 如果數據存在異常值和較多噪音,用標準化,可以間接通過中心化避免異常值和極端值的影響。
參考資料:
[1]. https://www.jianshu.com/p/95a8f035c86c
[2]. https://www.zhihu.com/question/20455227