是爲了將數據映射到0~1之間,去掉量綱的過程,讓計算更加合理,不會由於量綱問題致使1米與100mm產生不一樣。python
歸一化是線性模型作數據預處理的關鍵步驟,好比LR,非線性的就不用歸一化了。面試
歸一化就是讓不一樣維度之間的特徵在數值上有必定比較性,能夠大大提升分類器的準確性。算法
缺點:這種方法有個缺陷就是當有新數據加入時,可能致使max和min的變化,須要從新定義。機器學習
另外,最大值與最小值很是容易受異常點影響,因此這種方法魯棒性較差,只適合傳統精確小數據場景函數
消除分佈產生的度量誤差,例如:班級數學考試,數學成績在90-100之間,語文成績在60-100之間,那麼,小明數學90,語文100,小花數學95,語文95,如何評價兩個綜合成績好壞的數學處理方式。學習
答案:這取決於咱們的邏輯迴歸是否是用正則。spa
若是你不用正則,那麼,標準化並非必須的,若是你用正則,那麼標準化是必須的。(暗坑3)
爲何呢?
由於不用正則時,咱們的損失函數只是僅僅在度量預測與真實的差距,加上正則後,咱們的損失函數除了要度量上面的差距外,還要度量參數值是否足夠小。而參數值的大小程度或者說大小的級別是與特徵的數值範圍相關的。舉例來講,咱們用體重預測身高,體重用kg衡量時,訓練出的模型是: 身高 = 體重*x ,x就是咱們訓練出來的參數。
當咱們的體重用噸來衡量時,x的值就會擴大爲原來的1000倍。
在上面兩種狀況下,都用L1正則的話,顯然對模型的訓練影響是不一樣的。.net
假如不一樣的特徵的數值範圍不同,有的是0到0.1,有的是100到10000,那麼,每一個特徵對應的參數大小級別也會不同,在L1正則時,咱們是簡單將參數的絕對值相加,由於它們的大小級別不同,就會致使L1最後只會對那些級別比較大的參數有做用,那些小的參數都被忽略了。3d
若是你回答到這裏,面試官應該基本滿意了,可是他可能會進一步考察你,若是不用正則,那麼標準化對邏輯迴歸有什麼好處嗎?orm
答案是有好處,進行標準化後,咱們得出的參數值的大小能夠反應出不一樣特徵對樣本label的貢獻度,方便咱們進行特徵篩選。若是不作標準化,是不能這樣來篩選特徵的。
答到這裏,有些厲害的面試官可能會繼續問,作標準化有什麼注意事項嗎?
最大的注意事項就是先拆分出test集,不要在整個數據集上作標準化,由於那樣會將test集的信息引入到訓練集中,這是一個很是容易犯的錯誤!
舉例:簡單的預測房價的線性迴歸模型:
有一組關於房價和房子變量的數據集,經過房子的面積,房間數量,房子的層數來預測房價。
佔地面積1800尺,房間數量3間,房子層數2層-> 房價?;爲了方便對比,咱們分別看一下標準化前和標準化後的模型輸出分佈是怎麼樣的。
能夠看出,標準化先後變量的係數不一樣,偏差不一樣,可是R平方,和變量的t值是相同的。
如今咱們來預測一個1590尺,3個臥室,3層的房屋
咱們發現預測出來的房價是同樣的。
這時你必定會想,既然結果都同樣,作不作標準化,都同樣嘛。說到這裏,咱們再看一下,建模時尋找最優解的時間吧。
爲何標準化後的建模時間會短呢?這時候就要提及尋找係數最優解-梯度降低法。
標準化前,因爲變量的單位相差很大,致使了橢圓型的梯度輪廓。標準化後,把變量變成統一單位,產生了圓形輪廓。因爲梯度降低是按切線方向降低,因此致使了系統在橢圓輪廓不停迂迴地尋找最優解,而圓形輪廓就能輕鬆找到了。
還有一種比較極端的狀況,有時沒作標準化,模型始終找不到最優解,一直不收斂。
咱們再來看一下,若是將預測房價的變量,用PCA方法來降維,會不會對結果產生影響。
咱們看出在標準化前,用一個成分就能解釋99%的變量變化,而標準化後一個成分解釋了75%的變化。 主要緣由就是在沒有標準化的狀況下,咱們給了居住面積過大權重,形成了這個結果。
Kmeans,KNN一些涉及到距離有關的算法,或者聚類的話,都是須要先作變量標準化的。
舉例:咱們將3個城市分紅兩類,變量有面積和教育程度佔比;三個城市分別是這樣的:
城市A,面積挺大,可是成天發生偷盜搶劫,教育程度低;
城市B,面積也挺大,治安不錯,教育程度高;
城市C,面積中等,治安也挺好,教育程度也挺高;
咱們若是不作標準化,直接作聚類模型的話,A城市和B城市分在一起了,你想一想,一個治安挺好的城市和一個總體偷盜搶劫城市分在一塊兒,實在是有點違反常理。
總結:
在分類、聚類算法中,須要使用距離來度量類似性的時候、或者使用PCA技術進行降維的時候,Z-score standardization表現更好
基於樹的模型不須要標準化;
用到正則的線性模型必定要標準化,沒用到正則的線性模型不必定要標準化, 但標準化能夠加快收斂;
基於距離或聚類須要先作標準化,如KNN、kmeans
PCA最好先作標準化
模型算法裏面有沒關於對距離的衡量,沒有關於對變量間標準差的衡量。好比decision tree 決策樹,他採用算法裏面沒有涉及到任何和距離等有關的,因此在作決策樹模型時,一般是不須要將變量作標準化的。
在不涉及距離度量、協方差計算、數據不符合正太分佈的時候,可使用歸一化方法。好比圖像處理中,將RGB圖像轉換爲灰度圖像後將其值限定在[0 255]的範圍。有時候,咱們必需要特徵在0到1之間,此時就只能用歸一化。有種svm可用來作單分類,裏面就須要用到歸一化。
#導入數據到data變量中 import pandas data = pandas.read_csv('路徑.csv') #(一)Min-Max 標準化 from sklearn.preprocessing import MinMaxScaler #初始化一個scaler對象 scaler = MinMaxScaler() #調用scaler的fit_transform方法,把咱們要處理的列做爲參數傳進去 data['標準化後的A列數據'] = scaler.fit_transform(data['A列數據']) data['標準化後的B列數據'] = scaler.fit_transform(data['B列數據']) #(二)Z-Score標準化 (可在scale中直接實現) from sklearn.preprocessing import scale data['標準化後的A列數據'] = scale(data['A列數據']) data['標準化後的B列數據'] = scale(data['B列數據']) # (三) Normalizer歸一化 from sklearn.preprocessing import Normalizer scaler = Normalizer() #歸一化能夠同時處理多個列,因此[0]第一個進行賦值 data['歸一化後的A列數據'] = scaler.fit_transform(data['A列數據'])[0] data['歸一化後的B列數據'] = scaler.fit_transform(data['B列數據'])[0]
參考文獻:
【1】關於數據建模變量標準化