不少答主都解釋了為什麼消除量綱可以加速優化過程,直觀角度可以參考 @憶臻的回答(他的最高票回答指的不是我的答案)。我想在大家回答上補充一些內容:資料縮放的本質是什麼
不同資料縮放的區別
如何選擇適合的縮放方法
在這個回答下,我們對一維資料的縮放有如下定義:歸一化(normalization):
標準化(standardization):
其中和
代表樣本的均值和標準差,
為最大值,
為最小值。
1. 歸一化和標準化本質上都是一種線性變換
先看歸一化,在資料給定的前提下,令常數
,常數
,那麼歸一化的新的形式就是
。在這種改寫後下,易發現和標準化形式
類似,因為在資料給定後
和 也可看做常數。
因此可以再稍微變形一下:
(公式1)
就發現事實上就是對向量
按照比例壓縮
再進行平移
。所以歸一化和標準化的本質就是一種線性變換。
舉個簡單的例子:原始資料:
,其中
, ,
歸一化:代入公式1,將
壓縮4倍並平移
,得到,最終有
標準化:與歸一化類似,略
2. 線性變化的性質
線性變換有很多良好的性質,這些性質決定了為什麼對資料進行改變後竟然不會造成「失效」,反而還能提高資料的表現。拿其中很重要的乙個性質為例,線性變化不改變原始資料的數值排序。
感興趣的朋友可以試試下面的**,就會發現這兩種處理方法都不會改變資料的排序。對於很多模型來說,這個性質保證了資料依然有意義,順序性不變,而不會造成了額外的影響。
from sklearn import preprocessing
from scipy.stats import rankdata
x = [[1], [3], [34], [21], [10], [12]]
std_x = preprocessing.standardscaler().fit_transform(x)
norm_x = preprocessing.minmaxscaler().fit_transform(x)
# print(std_x)
# print(norm_x)
print('原始順序 :', rankdata(x))
print('標準化順序:', rankdata(std_x))
print('歸一化順序:', rankdata(norm_x))
說白了,只是因為線性變換保持線性組合與線性關係式不變,這保證了特定模型不會失效,忘記的朋友需要翻翻高數課本。
3. 歸一化和標準化的區別
我們已經說明了它們的本質是縮放和平移,但區別是什麼呢?在不涉及線性代數的前提下,我們給出一些直覺的解釋:歸一化的縮放是「拍扁」統一到區間(僅由極值決定),而標準化的縮放是更加「彈性」和「動態」的,和整體樣本的分布有很大的關係。值得注意:歸一化:縮放僅僅跟最大、最小值的差別有關。
標準化:縮放和每個點都有關係,通過方差(variance)體現出來。與歸一化對比,標準化中所有資料點都有貢獻(通過均值和標準差造成影響)。
當資料較為集中時,
更小,於是資料在標準化後就會更加分散。如果資料本身分布很廣,那麼
較大,資料就會被集中到更小的範圍內。
從輸出範圍角度來看,
必須在0-1間。對比來看,顯然
,甚至在極端情況下
,所以標準化的輸出範圍一定比歸一化更廣。歸一化: 輸出範圍在0-1之間
標準化:輸出範圍是負無窮到正無窮
4. 什麼時候用歸一化?什麼時候用標準化?
我們已經從第三部分得到了一些性質,因此可以得到以下結論:如果對輸出結果範圍有要求,用歸一化
如果資料較為穩定,不存在極端的最大最小值,用歸一化
如果資料存在異常值和較多噪音,用標準化,可以間接通過中心化避免異常值和極端值的影響
一般來說,我個人建議優先使用標準化。在對輸出有要求時再嘗試別的方法,如歸一化或者更加複雜的方法。很多方法都可以將輸出調整到0-1,如果我們對於資料的分布有假設的話,更加有效方法是使用相對應的概率密度函式來轉換。讓我們以高斯分布為例,我們可以首先計算高斯誤差函式(gaussian error function),此處定為
,那麼可用下式進行轉化:
特徵工程 特徵歸一化
為了消除資料特徵之間的量綱影響,需要對特徵進行歸一化 normalization 處理,使得不同特徵處於同乙個數量級,具有可比性 2.1 線性函式歸一化 min max scaling 對原始資料進行線性變換,使結果對映到 0,1 的範圍內,實現對原始資料的等比縮放。歸一化公式 其中,x為原始資料,...
特徵工程之特徵歸一化
百面機器學習 為了消除資料特徵之間的量綱影響,使得不同指標之間具有可比性。在實際應用中,通過梯度下降法求解的模型通常是需要歸一化的。但對於決策樹模型並不適用。對原始資料進行線性變換,使結果對映到 0,1 實現對原始資料的等比縮放。公式如下 x no rm x xmi nxma x xm in x f...
特徵工程 歸一化 類別處理
二 類別型特徵 對於乙個機器學習問題,資料和特徵往往決定了結果的上線,而模型 演算法的選擇及優化則是在逐步接近這個上限。特徵工程,就是對原始資料進行一系列工程處理,將其提煉為特徵,做為輸入供演算法和模型使用。特徵工程的目的是去除原始資料中的雜質和冗餘,設計更高效的特徵以刻畫求解的問題與 模型之間的關...