處理數據時不進行歸一化會有什麼影響?歸一化的作用是什麼?什麼時候需要歸一化?有哪些歸一化的方法?


這是要我放出我所有關於歸一化的答案啊:

在進行數據分析的時候,什麼情況下需要對數據進行標準化處理? - 王贇 Maigo 的回答

機器學習數據歸一化的的方法有哪些?適合於什麼樣的數據? - 王贇 Maigo 的回答

為什麼feature scaling會 使gradient descent的收斂更好? - 王贇 Maigo 的回答

數據特徵的歸一化,是對整個矩陣還是對每一維特徵? - 王贇 Maigo 的回答


三年半後補充修正: @憶臻 的答案是正確的,縱橫坐標應該是 theta_房間, theta_面積 而不是 房間面積,三年多前回答的該問題畫圖倉促只標記了變數,實屬錯誤,慚愧慚愧,圖就不重畫了,大家注意就好了

原答案:

沒有經過歸一化,尋找最優解的過程:

經過歸一化,把各個特徵的尺度控制在相同的範圍內:


歸一化化定義:我是這樣認為的,歸一化化就是要把你需要處理的數據經過處理後(通過某種演算法)限制在你需要的一定範圍內。首先歸一化是為了後面數據處理的方便,其次是保正程序運行時收斂加快。

方法有如下:

1、線性函數轉換,表達式如下:

  y=(x-MinValue)/(MaxValue-MinValue)

  說明:x、y分別為轉換前、後的值,MaxValue、MinValue分 別為樣本的最大值和最小值。

  2、對數函數轉換,表達式如下:

  y=log10(x)

  說明:以10為底的對數函數轉換。

  3、反餘切函數轉換,表達式如下:

  y=atan(x)*2/PI

  4、式(1)將輸入值換算為[-1,1]區間的值,在輸出層用式(2)換算回初始值,其中 和分別表示訓練樣本集中負荷的最大值和最小值。

  在統計學中,歸一化的具體作用是歸納統一樣本的統計分布性。歸一化在0-1之間是統計的概率分布,歸一化在-1--+1之間是統計的坐標分布。


首先最高票的答案,我覺得是有問題的,橫縱坐標表示是有問題的(橫縱坐標應該是theta1,theta2),下面我根據自己理解進行總結。

為什麼要進行歸一化處理,下面從尋找最優解這個角度給出自己的看法。

例子

假定為預測房價的例子,自變數為面積,房間數兩個,因變數為房價。

那麼可以得到的公式為:

y=	heta _{1}x_{1} +	heta _{2}x_{2}

首先我們祭出兩張圖代表數據是否均一化的最優解尋解過程。

未歸一化:

歸一化之後

為什麼會出現上述兩個圖,並且它們分別代表什麼意思。

我們在尋找最優解的過程也就是在使得損失函數值最小的theta1,theta2。

上述兩幅圖代碼的是損失函數的等高線。

我們很容易看出,當數據沒有歸一化的時候,面積數的範圍可以從0~1000,房間數的範圍一般為0~10,可以看出面積數的取值範圍遠大於房間數。

影響

這樣造成的影響就是在畫損失函數的時候,

數據沒有歸一化的表達式,可以為:

J=(3	heta _{1}+ 600	heta _{2}-y_{correct} )^{2}

造成圖像的等高線為類似橢圓形狀,最優解的尋優過程就是像下圖所示:

而數據歸一化之後,損失函數的表達式可以表示為:

J=(0.5	heta _{1}+ 0.55	heta _{2}-y_{correct} )^{2}

其中變數的前面係數幾乎一樣,則圖像的等高線為類似圓形形狀,最優解的尋優過程像下圖所示:

從上可以看出,數據歸一化後,最優解的尋優過程明顯會變得平緩,更容易正確的收斂到最優解。

這也是數據為什麼要歸一化的一個原因。

致謝:朱博、陳博

更多文章,可關注專欄:為什麼要對數據進行歸一化處理? - 知乎專欄


暫時只回答歸一化的效果。

假設有兩個變數,都是均勻分布,X1範圍是100000到200000,X2的範圍是1到2。

現在請在一張A4紙上畫個坐標,點出這些點。

很顯然,你會點出很多處於同一直線上的點,我們稱這條直線為L。也就是說,如果現在我們要做一個classification的話,X2幾乎可以被忽略。X2很無辜的被幹掉了,僅僅因為所謂量綱的問題。

即便X2不被幹掉,我們現在繼續求解,來做 gradient descent。 很顯然,如果某一步我們求得的下降方向不在直線L上,幾乎可以肯定肯定這步不會下降。這就會導致不收斂,或者收斂但很慢。

再來,我們做一遍歸一化,全部化為[0,1]區間上。

現在再在紙上畫個坐標,點出這些點。

好了,他們現在均勻的分布在一個圓的範圍內。X2不會被忽略了,收斂的問題也解決了。

這麼說好像很不直觀,等回家了配個圖。


不同的模型對特徵的分布假設是不一樣的。比如SVM 用高斯核的時候,所有維度共用一個方差,這不就假設特徵分布是圓的么,輸入橢圓的就坑了人家,所以簡單的歸一化都還不夠好,來杯白化才有勁。比如用樹的時候就是各個維度各算各的切分點,沒所謂。


在量綱不一而對比標準統一的時候需要做歸一化,歸一化也有很多方法,正確選擇方法對數據處理的有效性和精確性影響很大。


本質上是使得目標函數的Hessian矩陣的條件數變小,有更好的收斂性質了


數據歸一化,很重要。比如在用SVM分類時,數據尺度不統一對分類準確率影響很大。歸一化一般將數據規整到一個小範圍之間,如[0,1]或[-1,1],具體的方法一范求和或二范求模歸一化等。


取消量綱 使得剃度始終朝著最小值的方向前進 少走彎路 加速收斂


雖然同樣作出了歸一化,但歸一化的目的卻各不相同。對於不同的模型,不同的業務,歸一化就會有不同的意義。

我本人總結如下:

一.無量綱化:

例如房子數量和收入,因為從業務層知道,這兩者的重要性一樣,所以把它們全部歸一化。 這是從業務層面上作的處理。

二.避免數值問題:

太大的數會引發數值問題。

三.一些模型求解的需要。

例如梯度下降法。 @死跑龍套的 所說的,就是一種情況-----不歸一化,容易產生陝谷,而學習率較大時,就會如死跑龍套的截的圖一樣,以之字形下降。學習率較小,則會產生直角形路線,不管怎麼樣,都不會是好路線。

四:特殊情況,特殊分析,不同的模型,歸一化有不同的原因。例如關於BP神經網路的,可以看這張文章: 神經網路為什麼要歸一化 http://nnetinfo.com/nninfo/showText.jsp?id=37。這裡就不再展開了。


數據歸一化的目的是為了把不同來源的數據統一到一個參考系下,這樣比較起來才有意義。情況太多了,真的不知道怎麼舉例子。


歸一化首先在維數非常多的時候,可以防止某一維或某幾維對數據影響過大,其次可以程序可以運行更快。方法很多,min-max,z-score,p範數等,具體怎麼使用,要根據數據集的特徵來選擇。


首先就是量綱的問題,不同的數據在不同列數據的數量級相差過大的話,計算起來大數的變化會掩蓋掉小數的變化。

其次是收斂速度的問題,歸一化之後收斂速度好。

還有就是SVM參數尋優的過程。

一般使用SVM的時候,c,g參數要在一定範圍內尋優。如果你的輸入過大的話,那麼最好的c,g取值很有可能超出你的尋優範圍。

而歸一化之後,數據範圍被你限制了,一般是[-1,1]或者[0,1],c,g尋優範圍的話也基本上能覆蓋上c,g的最優取值了。


標準化方法的選擇需要根據度量的數值特徵,Log函數適用於數值存在明顯量級上差異的度量,如橫跨了百、千、萬的度量就可以選擇Log函數,如果數值上沒有這麼大的差異,建議還是使用Min-Max或者Z標準化


you can refer to my summary on CSDN blog

http://blog.csdn.net/yudf2010/article/details/40779953


一個非常簡單的道理, 這東西如果不知道做不做, 原則上就選那種看起來好的。 比如不知道歸一化會不會有好處, 如果試錯的時間比較少, 那麼就做。 就這麼簡單。 因為很多時候無效,很多時候有效。 純經驗之談。


為 @劉典 的答案補充一個例子:進行Log分析時,會將原本絕對化的時間序列歸一化到某個基準時刻,形成相對時間序列,方便排查。


歸一化屬於數據的預處理階段。

一個樣本中,不同的屬性有不同的取值範圍,舉個栗子,房屋面積和距離最近地鐵站的距離對於房屋價格的影響,房屋面積的取值範圍一般是20-200平方米,而到地鐵站的距離可能是20-2000米,如果直接按這兩個數據進行線性加權,顯然距離比面積對於結果影響更大。這樣會導致訓練的時間過長以及優化困難。

所以,歸一化的意義就在於將所有的屬性按照原本的比例,都放縮到一個固定的區間內,常用的如[0,1]或 [-1,1],這樣在梯度優化的過程中,才能達到相對最優的收斂過程。

附一張上課拍的課件。


看到的一篇帖子,

講了歸一化常用方法和歸一化的作用

https://uqer.io/community/share/56c3e9c6228e5b0fe6b17d95


推薦閱讀:

如何評價小米 2013 上半年業績,相對其他公司的成長有哪些可參照性?
自己寫了一個C++矩陣計算庫,想做一下全面測試,該如何進行?
小龍蝦為什麼這麼火以及怎麼火遍全國的?
工作3年後轉行 互聯網數據分析 是否來得及?

TAG:數據挖掘 | 數據分析 | 機器學習 | 推薦系統 |