如果某個特征的方差遠大於其它特征的方差,那么它將會在算法學習中占據主導位置,導致我們的學習器不能像我們期望的那樣,去學習其他的特征,這將導致最后的模型收斂速度慢甚至不收斂,因此我們需要對這樣的特征數據進行標准化/歸一化。
1.StandardScaler
標准化數據通過減去均值然后除以方差(或標准差),這種數據標准化方法經過處理后數據符合標准正態分布,即均值為0,標准差為1,轉化函數為:x =(x - 𝜇)/𝜎
import numpy as np from sklearn.preprocessing import StandardScaler ''' scale_: 縮放比例,同時也是標准差 mean_: 每個特征的平均值 var_:每個特征的方差 n_sample_seen_:樣本數量,可以通過patial_fit 增加 ''' x = np.array(range(1, 10)).reshape(-1, 1) ss = StandardScaler() ss.fit(X=x) print(x) print(ss.n_samples_seen_) print(ss.mean_) print(ss.var_) print(ss.scale_) print('標准化后的數據:') y = ss.fit_transform(x)
>>>
[[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]]
9
[5.]
[6.66666667]
[2.5819889]
標准化后的數據:
[[-1.54919334]
[-1.161895 ]
[-0.77459667]
[-0.38729833]
[ 0. ]
[ 0.38729833]
[ 0.77459667]
[ 1.161895 ]
[ 1.54919334]]