轉自:數據標準化/歸一化normalization
這裏主要講連續型特徵歸一化的經常使用方法。離散參考[數據預處理:獨熱編碼(One-Hot Encoding)]。html
基礎知識參考:git
[均值、方差與協方差矩陣 ]算法
[矩陣論:向量範數和矩陣範數 ]
數組
數據的標準化(normalization)和歸一化
數據的標準化(normalization)是將數據按比例縮放,使之落入一個小的特定區間。在某些比較和評價的指標處理中常常會用到,去除數據的單位限制,將其轉化爲無量綱的純數值,便於不一樣單位或量級的指標可以進行比較和加權。其中最典型的就是數據的歸一化處理,即將數據統一映射到[0,1]區間上。數據結構
目前數據標準化方法有多種,歸結起來能夠分爲直線型方法(如極值法、標準差法)、折線型方法(如三折線法)、曲線型方法(如半正態性分佈)。不一樣的標準化方法,對系統的評價結果會產生不一樣的影響,然而不幸的是,在數據標準化方法的選擇上,尚未通用的法則能夠遵循。dom
歸一化的目標
1 把數變爲(0,1)之間的小數
主要是爲了數據處理方便提出來的,把數據映射到0~1範圍以內處理,更加便捷快速,應該歸到數字信號處理範疇以內。
2 把有量綱表達式變爲無量綱表達式
歸一化是一種簡化計算的方式,即將有量綱的表達式,通過變換,化爲無量綱的表達式,成爲純量。 好比,複數阻抗能夠歸一化書寫:Z = R + jωL = R(1 + jωL/R) ,複數部分變成了純數量了,沒有量綱。
另外,微波之中也就是電路分析、信號系統、電磁波傳輸等,有不少運算均可以如此處理,既保證了運算的便捷,又能凸現出物理量的本質含義。機器學習
歸一化後有兩個好處
1. 提高模型的收斂速度函數
以下圖,x1的取值爲0-2000,而x2的取值爲1-5,假如只有這兩個特徵,對其進行優化時,會獲得一個窄長的橢圓形,致使在梯度降低時,梯度的方向爲垂直等高線的方向而走之字形路線,這樣會使迭代很慢,相比之下,右圖的迭代就會很快(理解:也就是步長走多走少方向老是對的,不會走偏)post
2.提高模型的精度學習
歸一化的另外一好處是提升精度,這在涉及到一些距離計算的算法時效果顯著,好比算法要計算歐氏距離,上圖中x2的取值範圍比較小,涉及到距離計算時其對結果的影響遠比x1帶來的小,因此這就會形成精度的損失。因此歸一化頗有必要,他可讓各個特徵對結果作出的貢獻相同。
在多指標評價體系中,因爲各評價指標的性質不一樣,一般具備不一樣的量綱和數量級。當各指標間的水平相差很大時,若是直接用原始指標值進行分析,就會突出數值較高的指標在綜合分析中的做用,相對削弱數值水平較低指標的做用。所以,爲了保證結果的可靠性,須要對原始指標數據進行標準化處理。
在數據分析以前,咱們一般須要先將數據標準化(normalization),利用標準化後的數據進行數據分析。數據標準化也就是統計數據的指數化。數據標準化處理主要包括數據同趨化處理和無量綱化處理兩個方面。數據同趨化處理主要解決不一樣性質數據問題,對不一樣性質指標直接加總不能正確反映不一樣做用力的綜合結果,須先考慮改變逆指標數據性質,使全部指標對測評方案的做用力同趨化,再加總才能得出正確結果。數據無量綱化處理主要解決數據的可比性。通過上述標準化處理,原始數據均轉換爲無量綱化指標測評值,即各指標值都處於同一個數量級別上,能夠進行綜合測評分析。
從經驗上說,歸一化是讓不一樣維度之間的特徵在數值上有必定比較性,能夠大大提升分類器的準確性。
數據須要歸一化的機器學習算法
須要歸一化的模型:
有些模型在各個維度進行不均勻伸縮後,最優解與原來不等價,例如SVM(距離分界面遠的也拉近了,支持向量變多?)。對於這樣的模型,除非原本各維數據的分佈範圍就比較接近,不然必須進行標準化,以避免模型參數被分佈範圍較大或較小的數據dominate。
有些模型在各個維度進行不均勻伸縮後,最優解與原來等價,例如logistic regression(由於θ的大小原本就自學習出不一樣的feature的重要性吧?)。對於這樣的模型,是否標準化理論上不會改變最優解。可是,因爲實際求解每每使用迭代算法,若是目標函數的形狀太「扁」,迭代算法可能收斂得很慢甚至不收斂。因此對於具備伸縮不變性的模型,最好也進行數據標準化。
不須要歸一化的模型:
ICA好像不須要歸一化(由於獨立成分若是歸一化了就不獨立了?)。
基於平方損失的最小二乘法OLS不須要歸一化。
常見的數據歸一化方法
min-max標準化(Min-max normalization)/0-1標準化(0-1 normalization)
也叫離差標準化,是對原始數據的線性變換,使結果落到[0,1]區間,轉換函數以下:
其中max爲樣本數據的最大值,min爲樣本數據的最小值。
def Normalization(x):
return [(float(i)-min(x))/float(max(x)-min(x)) for i in x]
若是想要將數據映射到[-1,1],則將公式換成:
x∗=x−xmeanxmax−xmin
x_mean表示數據的均值。
def Normalization2(x):
return [(float(i)-np.mean(x))/(max(x)-min(x)) for i in x]
這種方法有一個缺陷就是當有新數據加入時,可能致使max和min的變化,須要從新定義。
log函數轉換
經過以10爲底的log函數轉換的方法一樣能夠實現歸一下,具體方法以下:
看了下網上不少介紹都是x*=log10(x),實際上是有問題的,這個結果並不是必定落到[0,1]區間上,應該還要除以log10(max),max爲樣本數據最大值,而且全部的數據都要大於等於1。
atan函數轉換
用反正切函數也能夠實現數據的歸一化。
使用這個方法須要注意的是若是想映射的區間爲[0,1],則數據都應該大於等於0,小於0的數據將被映射到[-1,0]區間上,而並不是全部數據標準化的結果都映射到[0,1]區間上。
z-score 標準化(zero-mean normalization)
最多見的標準化方法就是Z標準化,也是SPSS中最爲經常使用的標準化方法,spss默認的標準化方法就是z-score標準化。
也叫標準差標準化,這種方法給予原始數據的均值(mean)和標準差(standard deviation)進行數據的標準化。
通過處理的數據符合標準正態分佈,即均值爲0,標準差爲1,其轉化函數爲:
x∗=x−μσ
其中μ爲全部樣本數據的均值,σ爲全部樣本數據的標準差。
z-score標準化方法適用於屬性A的最大值和最小值未知的狀況,或有超出取值範圍的離羣數據的狀況。
標準化的公式很簡單,步驟以下
1.求出各變量(指標)的算術平均值(數學指望)xi和標準差si ;
2.進行標準化處理:
zij=(xij-xi)/si
其中:zij爲標準化後的變量值;xij爲實際變量值。
3.將逆指標前的正負號對調。
標準化後的變量值圍繞0上下波動,大於0說明高於平均水平,小於0說明低於平均水平。
def z_score(x, axis): x = np.array(x).astype(float) xr = np.rollaxis(x, axis=axis) xr -= np.mean(x, axis=axis) xr /= np.std(x, axis=axis) # print(x) return x
爲何z-score 標準化後的數據標準差爲1?
x-μ只改變均值,標準差不變,因此均值變爲0
(x-μ)/σ只會使標準差除以σ倍,因此標準差變爲1
Decimal scaling小數定標標準化
這種方法經過移動數據的小數點位置來進行標準化。小數點移動多少位取決於屬性A的取值中的最大絕對值。
將屬性A的原始值x使用decimal scaling標準化到x'的計算方法是:
x'=x/(10^j)
其中,j是知足條件的最小整數。
例如 假定A的值由-986到917,A的最大絕對值爲986,爲使用小數定標標準化,咱們用每一個值除以1000(即,j=3),這樣,-986被規範化爲-0.986。
注意,標準化會對原始數據作出改變,所以須要保存所使用的標準化方法的參數,以便對後續的數據進行統一的標準化。
Logistic/Softmax變換
logistic函數和標準正態函數
新數據=1/(1+e^(-原數據))
這個函數的做用就是使得P(i)在負無窮到0的區間趨向於0,在0到正無窮的區間趨向於1。一樣,函數(包括下面的softmax)加入了e的冪函數正是爲了兩極化:正樣本的結果將趨近於1,而負樣本的結果趨近於0。這樣爲多類別分類提供了方便(能夠把P(i)看做是樣本屬於類別i的機率)。
Note: 上半部分圖形顯示了機率P隨着自變量變化而變化的狀況,下半部分圖形顯示了這種變化的速度的變化。能夠看得出來,機率P與自變量仍然存在或多或少的線性關係,主要是在頭尾兩端被鏈接函數扭曲了,從而實現了[0,1]限制。同時,自變量取值靠近中間的時候,機率P變化比較快,自變量取值靠近兩端的時候,機率P基本再也不變化。這就跟咱們的直觀理解相符合了,彷佛是某種邊際效用遞減的特色。
[logistic迴歸的一些直觀理解(1.鏈接函數 logit probit)]
Softmax函數
是logistic函數的一種泛化,Softmax是一種形以下式的函數:
假設咱們有一個數組,V,Vi表示V中的第i個元素,那麼這個元素的Softmax值就是
也就是說,是該元素的指數,與全部元素指數和的比值
爲何要取指數,第一個緣由是要模擬 max 的行爲,因此要讓大的更大。第二個緣由是須要一個可導的函數。
經過softmax函數,可使得P(i)的範圍在[0,1]之間。在迴歸和分類問題中,一般θ是待求參數,經過尋找使得P(i)最大的θi做爲最佳參數。
此外Softmax函數一樣可用於非線性估計,此時參數θ可根據現實意義使用其餘列向量替代。
Softmax函數獲得的是一個[0,1]之間的值,且∑Kk=1P(i)=1,這個softmax求出的機率就是真正的機率,換句話說,這個機率等於指望。
[Machine Learning - VI. Logistic Regression邏輯迴歸 (Week 3) ]
模糊量化模式
新數據=1/2+1/2sin[派3.1415/(極大值-極小值)*(X-(極大值-極小值)/2) ] X爲原數據