數據歸一化、標準化和正則化

1. 歸一化(Normalization)

將數據集中某一列數值特徵的值縮放到0-1區間內:
在這裏插入圖片描述
x是指一列的值,x_i是列中的每一個,min(x)是這一列的最小值,max(x)是這一列的最大值。
當要求特徵必須是在0-1之間的,此時必須要使用歸一化。

2. 標準化(Standardization)

將數據集中某一列數值特徵的值縮放成平均值爲0,標準差爲1的狀態:
在這裏插入圖片描述

!深坑
求mean並不存在什麼異議,但是求std時就會有問題了,涉及到分母中是n還是(n-1)。

(1) 如果對一維數組x=[1,2,3]求std,那麼np.std(x)=x.std()=0.8164……,這個結果是不正確的,一定要設置ddof=1,因爲該方法中分母爲(n-ddof),而默認的ddof=0,所以設置ddof=1才能滿足公式中分母爲(n-1);
(2) 如果對多維數組x=[[1,0,2],[-1,0,-2]]求std,因爲在數據集中對**列**進行標準化纔有意義,所以np.std(x,axis=0)=x.std(axis=0)=[1,0,2],這時候不用再設置ddof=1;如果不設置axis=0,那麼則認爲對全部數字求std,與對x=[1,0,2,-1,0,-2]求std沒區別,所以仍然需要設置ddof=1;

與歸一化相比,標準化的使用更爲常見,原因如下:

  • 標準化更好的保持了樣本間距。當樣本中有異常點時,歸一化有可能將正常的值“擠”到一起去,而標準化則不會。例如[1,2,10000],假設10000是異常值,那麼歸一化之後就變成了[0, 0,0001, 1],正常的1,2就會被“擠”到一起去。如果不幸的是1和2的分類標籤還是相反的,那麼,當我們用梯度下降來做分類模型訓練時,模型會需要更長的時間收斂,因爲將樣本分開需要更大的努力!但是標準化的結果是[-0.70721286,0.7070007,1.41421356],不會將樣本“擠到”一起去;
  • 標準化更符合統計學假設。對於一個數值特徵來說,很大可能它是服從正太分佈的,而標準化是基於這個假設,將正態分佈調整爲標準正態分佈;

3. 正則化(Regularization)

將數據集中某一個樣本縮放成單位標準:
在這裏插入圖片描述

正則化(normalization)與歸一化和標準化不同,歸一化和標準化是對數據集中的列進行的操作,而正則化是對數據集中的行進行的操作。
常見的正則化是L2正則化,即使用L2範數,這也就是將向量單位化的過程。

4. 面試問題:

第一步:邏輯迴歸必須要使用標準化嗎?
這取決於我們是不是使用正則化項,如果使用正則,那麼標準化是必須的,如果不使用正則,標準化並不是必須的。
目標函數 = 損失函數 + 正則化項,損失函數只是度量預測與真實值之間的差距,而正則化項會度量參數值是否足夠小,參數值的大小程度與特徵值的範圍是相關的。比如用體重預測身高,身高=體重*w,如果體重用kg來衡量和用噸來衡量,w就會變化1000倍;另外對於不同的特徵,如果一個特徵的範圍是0-1,另一個特徵的範圍是100-1000,那麼每個特徵對應的參數級別也會不同,在L1正則中,是將所有的參數相加,由於參數的級別不同,導致L1最後只對那些級別較大的參數起作用,級別較小的參數都被忽略了。
第二步:不使用正則化項,標準化對邏輯迴歸有好處嗎?
當然有好處!標準化後,得到的參數可以反映不同特徵對label的貢獻程度,方便進行特徵篩選,如果不進行標準化,是不能這樣來篩選特徵的。
第三步:做標準化有什麼注意事項嗎?
最大的注意事項就是將整個datasets劃分成train和test,然後對train上的數據進行標準化,因爲如果在整個datasets上進行標準化,就會將test的信息引入train。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章