1. 程式人生 > >為什麼要資料歸一化和歸一化方法 為什麼要資料歸一化和歸一化方法

為什麼要資料歸一化和歸一化方法 為什麼要資料歸一化和歸一化方法

為什麼要資料歸一化和歸一化方法

2017年09月22日 08:59:58 閱讀數:11657
													<span class="tags-box artic-tag-box">
							<span class="label">標籤:</span>
															<a data-track-click="{&quot;mod&quot;:&quot;popu_626&quot;,&quot;con&quot;:&quot;機器學習&quot;}" class="tag-link" href="http://so.csdn.net/so/search/s.do?q=機器學習&amp;t=blog" target="_blank">機器學習																</a>
						<span class="article_info_click">更多</span></span>
																				<div class="tags-box space">
							<span class="label">個人分類:</span>
															<a class="tag-link" href="https://blog.csdn.net/wuxiaosi808/article/category/7063840" target="_blank">機器學習																</a>
						</div>
																							</div>
			<div class="operating">
													</div>
		</div>
	</div>
</div>
<article class="baidu_pl">
	<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post">
							            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-d7e2a68c7c.css">
					<div class="htmledit_views" id="content_views">

轉自:https://zhuanlan.zhihu.com/p/27627299

在餵給機器學習模型的資料中,對資料要進行歸一化的處理。

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

例子

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

那麼可以得到的公式為:

其中代表房間數,代表變數前面的係數。

其中代表面積,代表變數前面的係數。

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

未歸一化:

歸一化之後

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

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

上述兩幅圖程式碼的是損失函式的等高線。

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

影響

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

資料沒有歸一化的表示式,可以為:

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

而資料歸一化之後,損失函式的表示式可以表示為:

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

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

這也是資料為什麼要歸一化的一個原因。


作用:對於不同的特徵向量,比如年齡、購買量、購買額,在數值的量綱上相差十倍或者百千倍。如果不歸一化處理,就不容易進行比較、求距離,模型引數和正確度精確度就會受影響,甚至得不出正確的結果。
舉個例子:用梯度下降法求解最優解時,下圖展示沒有歸一化和歸一化處理兩種情況下的求解過程。
這裡寫圖片描述
左圖表示沒有歸一化的求解過程;右圖表示有歸一化的處理過程。
X1、X2表示特徵向量,數值區間分別為[0,2000],[1,5].
圖中藍線為等高線,紅色為梯度下降求解線,中心紅點為最優解。
左圖的Z字形為未歸一化處理的梯度下降求解過程。
右圖的1字形為歸一化處理後的梯度下降求解過程。
對比可知,歸一化處理後,等高線更圓,求解得到的梯度方向更能直指圓心,收斂速度更快,效率更高。
如果不歸一化,不但收斂速度慢,很可能找不到最優解。

歸一化除了能夠提高求解速度,還可能提高計算精度。
比如:計算樣本距離時,如果特徵向量取值範圍相差很大,如果不進行歸一化處理,則值範圍更大的特徵向量對距離的影響更大,實際情況是,取值範圍更小的特徵向量對距離影響更大,這樣的話,精度就會收到影響。

歸一化常用方法
1、線性歸一化函式(Min-Max Scaling)
x’ = (x-min(x))/(max(x)-min(x))
把原始資料取值轉換到[0,1]之間。
實際使用時,不同樣本集得到的max/min可能不同,造成歸一化結果不穩定,從而使模型後續使用也不穩定。
可以經驗值來代替max/min,比如人的年齡,max=100,min=0。避免不同樣本集max/min的不同造成的模型偏差。
2、0均值標準化(Z-score standardization)
x’ = (x-u)/theta.
u為樣本均值,theta為樣本方差。
轉換後的數值服從均值為0,方差為1的高斯正態分佈。
應用場景:原始資料(近似)高斯分佈。否則歸一化後的效果會很差。
3、非線性歸一化(Nonlinear Scaling)
包括對數log,指數e,正切等。
應用場景:資料分化比較大,有些很大,有些很小,可能用此方法將數值對映到一個比較小的範圍進行處理。log(V,2),log(V,10).

小結:
1、對於需要求距離的分類、聚類、相似度、協方差等,資料符合或者近似符合高斯正態分佈時,PCA降維時,常用0均值標準化,可以得到較好的效果。
2、對於其他情況,如果資料分化不是很大,可以用線性歸一化處理。
3、如果資料分化很大,可以用非線性歸一化處理。

參考文章
1、http://blog.csdn.net/zbc1090549839/article/details/44103801
2、http://www.open-open.com/lib/view/open1429697131932.html