將資料集中某一列數值特徵的值縮放到0-1區間內:
x是指一列的值,x_i是列中的每乙個,min(x)是這一列的最小值,max(x)是這一列的最大值。
當要求特徵必須是在0-1之間的,此時必須要使用歸一化。
將資料集中某一列數值特徵的值縮放成平均值為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;
與歸一化相比,標準化的使用更為常見,原因如下:
將資料集中某乙個樣本縮放成單位標準:
正則化(normalization)與歸一化和標準化不同,歸一化和標準化是對資料集中的列進行的操作,而正則化是對資料集中的行進行的操作。
常見的正則化是l2正則化,即使用l2範數,這也就是將向量單位化的過程。
第一步:邏輯回歸必須要使用標準化嗎?
這取決於我們是不是使用正則化項,如果使用正則,那麼標準化是必須的,如果不使用正則,標準化並不是必須的。
目標函式 = 損失函式 + 正則化項,損失函式只是度量**與真實值之間的差距,而正則化項會度量引數值是否足夠小,引數值的大小程度與特徵值的範圍是相關的。比如用體重**身高,身高=體重*w,如果體重用kg來衡量和用噸來衡量,w就會變化1000倍;另外對於不同的特徵,如果乙個特徵的範圍是0-1,另乙個特徵的範圍是100-1000,那麼每個特徵對應的引數級別也會不同,在l1正則中,是將所有的引數相加,由於引數的級別不同,導致l1最後只對那些級別較大的引數起作用,級別較小的引數都被忽略了。
第二步:不使用正則化項,標準化對邏輯回歸有好處嗎?
當然有好處!標準化後,得到的引數可以反映不同特徵對label的貢獻程度,方便進行特徵篩選,如果不進行標準化,是不能這樣來篩選特徵的。
第三步:做標準化有什麼注意事項嗎?
最大的注意事項就是將整個datasets劃分成train和test,然後對train上的資料進行標準化,因為如果在整個datasets上進行標準化,就會將test的資訊引入train。
歸一化 標準化和正則化
歸一化一般是將資料對映到指定的範圍,用於去除不同維度資料的量綱以及量綱單位。常見的對映範圍有 0,1 和 1,1 最常見的歸一化方法就是 min max 歸一化 舉個例子,我們判斷乙個人的身體狀況是否健康,那麼我們會採集人體的很多指標,比如說 身高 體重 紅細胞數量 白細胞數量等。乙個人身高 180...
歸一化 標準化 正則化
無量綱化使不同規格的資料轉換到同一規格。常用的無量綱化方法有標準化和區間縮放法。標準化的前提是特徵值服從正態分佈,標準化後,其轉換成標準正態分佈 區間縮放法利用了邊界值資訊,將特徵的取值區間縮放到某個特點的範圍,例如 0,1 等。標準化的前提是特徵值服從正態分佈,標準化後,其轉換成標準正態分佈 z ...
標準化 歸一化 正則化
x x x min x max x min 歸一化後的資料取值區間為 0,1 from sklearn.preprocessing import minmaxscaler import numpy as np data np.random.uniform 0,100,10 np.newaxis 隨機...