(什么~為什么~哪些)
一、為何需要歸一化
不同的評價指標往往具有不同的量綱(例如:對於評價房價來說量綱指:面積、房價數、樓層等;對於預測某個人患病率來說量綱指:身高、體重等)
這樣的情況會影響到數據分析的結果,為了消除指標之間量綱的影響,需要進行數據標准化處理,以解決數據指標之間的可比性。原始數據經過數據標准化處理后,各指標處於同一數量級,適合進行綜合對比評價
(1)歸一化后加快了梯度下降求最優解的速度
(2)歸一化有可能提高精度(歸一化是讓不同維度之間的特征在數值上有一定的比較性)
二、例子講解
假定為了預測房子價格,自變量為面積,房間數兩個,因變量為房價,那么可以得到的公式為:\(y = \theta_1x_1 + \theta_2x_2\),其中x1代表房間數,x2代表面積,首先給出兩張圖代表數據是否均一化的最優解尋解過程
未歸一化:
歸一化之后:
尋找最優解也就是尋找使得損失函數值最小的theta1、theta2。上述兩幅圖代表的是損失函數的等高線。當數據沒有歸一化的時候,面積數的范圍可以從0-1000,房間數的范圍一般為0-10,可以看出面積數的取值范圍遠大於房間數
形成的影響就是在形成損失函數的時候,數據沒有歸一化的表達式可以為:\(J = (3\theta_1 + 600\theta_2 - y)^2\),造成圖像的等高線為類似的橢圓形狀,最優解的尋優過程如下圖所示:

而數據歸一化后,損失函數的表達式可以表示為:\(J = (0.5\theta_1 + 0.55\theta_2 - y)^2\),其中變量的前面系數都在【0-1】范圍之間,則圖像的等高線為類似的圓形形狀,最優解的尋優過程如下圖所示:
1)min-max標准化(Min-Max Normalization)(線性函數歸一化):
-
- 定義:也稱為離差標准化,是對原始數據的線性變換,使得結果映射到0-1之間
- 本質:把數變為【0,1】之間的小數
- 轉換函數:\((X - Min)/(Max - Min)\)
-
- 定義:這種方法給與原始數據的均值(mean)和標准差(standard deviation)進行數據的標准化。經過處理的數據符合標准正態分布,即均值為0,標准差為1
- 本質:把有量綱表達式變成無量綱表達式
- 轉換函數:\((X - \mu)/\delta\)
其中,\(\mu\)為所有樣本數據的均值。\(\delta\)為所有樣本數據的標准差
四、sklearn模塊中的歸一化
數據正規化(data normalization)是將數據的每個樣本(向量)變換為單位范數的向量,各樣本之間是相互獨立的.其實際上,是對向量中的每個分量值除以正規化因子.常用的正規化因子有 L1, L2 和 Max
import numpy as np from sklearn.preprocessing import normalize x = np.array([[1, 2, 3, 4], [3,4,5,6], [5,6,7,8]], dtype='float32') print("Before normalization:\n ", x, '\n') options = ['l1', 'l2', 'max'] for opt in options: norm_x = normalize(x, axis=0, norm=opt) print("After %s normalization:\n" % opt.capitalize(), norm_x, '\n')
結果如下: