1. 程式人生 > >關於歸一化,標準化的一些整理

關於歸一化,標準化的一些整理

之前學習的過程中,一直以為歸一化和標準化效果差不多,老師說讓用哪種方法就用哪種方法就行,這可能就是一個經驗問題。但是最近在群裡討論,發現這兩個方法對資料的分佈影響不同,因此蒐集了一些資料,做點簡單的整理。

參考:【1】https://en.wikipedia.org/wiki/Normalization_(statistics)

【2】https://en.wikipedia.org/wiki/Feature_scaling

【3】https://www.zhihu.com/question/20467170

【4】https://blog.csdn.net/qq_23617681/article/details/51469778

【6】https://blog.csdn.net/pipisorry/article/details/52247379

【7】https://www.cnblogs.com/qingyunzong/p/7592517.html

【8】http://www.cnblogs.com/chaosimple/p/4153167.html

【9】http://www.cnblogs.com/zhaokui/p/5112287.html

【10】https://blog.csdn.net/zenghaitao0128/article/details/78361038

 

   根據維基百科解釋,統計學中的規範化(Normalization)可以具有一系列含義。在最簡單的情況中,評級的標準化(normalization of ratings)

意味著通常在平均之前將在不同尺度上測量的值調整到概念上的共同尺度。在更復雜的情況下,歸一化可以指更復雜的調整,目的是使調整值的整個概率分佈對齊。在教育評估中的得分標準化(normalization of scores)的例子下,可能有意將分佈與正態分佈對齊。概率分佈歸一化的另一種方法是分位數歸一化quantile normalization),其中不同度量的分位數被對齊。  

    在統計學的另一種用法中,歸一化是指建立統計的移位和縮放版本,其意圖是這些歸一化值允許以消除某些總影響的影響的方式比較不同資料集的相應歸一化值,如在一個異常的時間序列

 anomaly time series)。某些型別的規範化僅涉及重新縮放,以獲得相對於某個大小變數的值。關於測量尺度,這樣的比例使僅使比率測量有意義 (其中的測量比率是有意義的),而不是間隔測量(interval measurements)(其中僅距離是有意義的,但不是比)。 In theoretical statistics, parametric normalization can often lead to pivotal quantities – functions whose sampling distribution does not depend on the parameters – and to ancillary statistics – pivotal quantities that can be computed from observations, without knowing parameters.(這句話怎麼翻譯怎麼彆扭,決定不翻譯了)。

      舉個例子

關於 特徵縮放(Feature scaling),

     由於原始資料的值範圍變化很​​大,在一些機器學習演算法中,如果沒有標準化,目標函式將無法正常工作。例如,大多數分類器歐幾里德距離計算兩點之間的距離。如果其中一個要素具有寬範圍的值,則距離將受此特定要素的約束。因此,應對所有特徵的範圍進行歸一化,以使每個特徵大致與最終距離成比例。應用特徵縮放的另一個原因是梯度下降與特徵縮放比沒有它時收斂得快得多,如下圖所示,x1的取值為0-2000,而x2的取值為1-5,假如只有這兩個特徵,對其進行優化時,會得到一個窄長的橢圓形,導致在梯度下降時,梯度的方向為垂直等高線的方向而走之字形路線,這樣會使迭代很慢,相比之下,右圖的迭代就會很快(理解:也就是步長走多走少方向總是對的,不會走偏)

    

"標準化"和"歸一化"這兩個中文詞要指代四種Feature scaling(特徵縮放)方法(以下直接從維基百科搬運過來):

1.Rescaling (min-max normalization) 

Also known as min-max scaling or min-max normalization, is the simplest method and consists in rescaling the range of features to scale the range in [0, 1] or [−1, 1]. Selecting the target range depends on the nature of the data. The general formula is given as:

             x'={\frac  {x-{\text{min}}(x)}{{\text{max}}(x)-{\text{min}}(x)}}

where x is an original value,  x' is the normalized value. For example, suppose that we have the students' weight data, and the students' weights span [160 pounds, 200 pounds]. To rescale this data, we first subtract 160 from each student's weight and divide the result by 40 (the difference between the maximum and minimum weights).

2.Mean normalization 

   {\displaystyle x'={\frac {x-{\text{average}}(x)}{{\text{max}}(x)-{\text{min}}(x)}}}

where x is an original value,  x' is the normalized value.

3.Standardization 

In machine learning, we can handle various types of data, e.g. audio signals and pixel values for image data, and this data can include multiple dimensions. Feature standardization makes the values of each feature in the data have zero-mean (when subtracting the mean in the numerator) and unit-variance. This method is widely used for normalization in many machine learning algorithms (e.g., support vector machineslogistic regression, and artificial neural networks)  . The general method of calculation is to determine the distribution mean and standard deviation for each feature. Next we subtract the mean from each feature. Then we divide the values (mean is already subtracted) of each feature by its standard deviation.

              x' = \frac{x - \bar{x}}{\sigma}

Where  {\displaystyle {\bar {x}}={\text{average}}(x)} is the mean of that feature vector, and \sigma is its standard deviation.

4.Scaling to unit length 

Another option that is widely used in machine-learning is to scale the components of a feature vector such that the complete vector has length one. This usually means dividing each component by the Euclidean length of the vector:

                                      x'={\frac  {x}{||x||}}

In some applications (e.g. Histogram features) it can be more practical to use the L1 norm (i.e. Manhattan Distance, City-Block Length or Taxicab Geometry) of the feature vector. This is especially important if in the following learning steps the Scalar Metric is used as a distance measure.

在知乎上看到有人放了幾種規範化後的分佈圖,感覺比較直觀:

從以上幾個圖,可以明顯看出,歸一化確實沒有對分佈改變,而標準化確實對分佈改變了。在參考【9】中,博主對歸一化、標準化是什麼,帶來什麼變化、怎麼用進行了較為詳細的介紹,並有一些公式推導,感興趣可以看看。

最後,來說下這兩種方法什麼時候用。參考【6】中介紹了機器學習中的演算法需要/不需要歸一化的模型,

(1)需要歸一化的模型:

        有些模型在各個維度進行不均勻伸縮後,最優解與原來不等價,例如SVM(距離分介面遠的也拉近了,支援向量變多?)。對於這樣的模型,除非本來各維資料的分佈範圍就比較接近,否則必須進行標準化,以免模型引數被分佈範圍較大或較小的資料dominate。
        有些模型在各個維度進行不均勻伸縮後,最優解與原來等價,例如logistic regression(因為θ的大小本來就自學習出不同的feature的重要性吧?)。對於這樣的模型,是否標準化理論上不會改變最優解。但是,由於實際求解往往使用迭代演算法,如果目標函式的形狀太“扁”,迭代演算法可能收斂得很慢甚至不收斂(模型結果不精確)。所以對於具有伸縮不變性的模型,最好也進行資料標準化。

        有些模型/優化方法的效果會強烈地依賴於特徵是否歸一化,如LogisticReg,SVM,NeuralNetwork,SGD等。

(2)不需要歸一化的模型:

    (0/1取值的特徵通常不需要歸一化,歸一化會破壞它的稀疏性。)

    有些模型則不受歸一化影響,如DecisionTree。

    ICA好像不需要歸一化(因為獨立成分如果歸一化了就不獨立了?)。

    基於平方損失的最小二乘法OLS不需要歸一化。
 

另外,在參考【10】中提到如下,

1)最大最小標準化(Min-Max Normalization)

a). 本歸一化方法又稱為離差標準化,使結果值對映到[0 ,1]之間,轉換函式如下:

為什麼一些機器學習模型需要對資料進行歸一化?

b). 本歸一化方法比較適用在數值比較集中的情況;

c). 缺陷:如果max和min不穩定,很容易使得歸一化結果不穩定,使得後續使用效果也不穩定。實際使用中可以用經驗常量來替代max和min。

d).  應用場景:在不涉及距離度量、協方差計算、資料不符合正太分佈的時候,可以使用第一種方法或其他歸一化方法(不包括Z-score方法)。比如影象處理中,將RGB影象轉換為灰度影象後將其值限定在[0 255]的範圍

2)Z-score標準化方法

a). 資料處理後符合標準正態分佈,即均值為0,標準差為1,其轉化函式為:

為什麼一些機器學習模型需要對資料進行歸一化?

其中μ為所有樣本資料的均值,σ為所有樣本資料的標準差。

b). 本方法要求原始資料的分佈可以近似為高斯分佈,否則歸一化的效果會變得很糟糕;

c). 應用場景:在分類、聚類演算法中,需要使用距離來度量相似性的時候、或者使用PCA技術進行降維的時候,Z-score standardization表現更好。

3)非線性歸一化

a). 本歸一化方法經常用在資料分化比較大的場景,有些數值很大,有些很小。通過一些數學函式,將原始值進行對映。

b). 該方法包括 log,正切等,需要根據資料分佈的情況,決定非線性函式的曲線:

       ---log對數函式轉換方法

y = log10(x),即以10為底的對數轉換函式,對應的歸一化方法為:x' = log10(x) /log10(max),其中max表示樣本資料的最大

值,並且所有樣本資料均要大於等於1.

---atan反正切函式轉換方法

利用反正切函式可以實現資料的歸一化,即

x' = atan(x)*(2/pi)

使用這個方法需要注意的是如果想對映的區間為[0,1],則資料都應該大於等於0,小於0的資料將被對映到[-1,0]區間上.

---L2範數歸一化方法

L2範數歸一化就是特徵向量中每個元素均除以向量的L2範數:

應用場景說明:

1)概率模型不需要歸一化,因為這種模型不關心變數的取值,而是關心變數的分佈和變數之間的條件概率;

2)SVM、線性迴歸之類的最優化問題需要歸一化,是否歸一化主要在於是否關心變數取值;

3)神經網路需要標準化處理,一般變數的取值在-1到1之間,這樣做是為了弱化某些變數的值較大而對模型產生影響。一般神經網路中的隱藏層採用tanh啟用函式比sigmod啟用函式要好些,因為tanh雙曲正切函式的取值[-1,1]之間,均值為0.

4)在K近鄰演算法中,如果不對解釋變數進行標準化,那麼具有小數量級的解釋變數的影響就會微乎其微。