1、标准化(Z-Score),或者去除均值和方差缩放
公式为:(X-mean)/std 计算时对每个属性/每列分别进行。
将数据按期属性(按列进行)减去其均值,并处以其方差。得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1。
使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化。
>>> from sklearn import preprocessing >>> import numpy as np >>> X = np.array([[ 1., -1., 2.], ... [ 2., 0., 0.], ... [ 0., 1., -1.]]) >>> X_scaled = preprocessing.scale(X) >>> X_scaled array([[ 0. ..., -1.22..., 1.33...], [ 1.22..., 0. ..., -0.26...], [-1.22..., 1.22..., -1.06...]]) >>>#处理后数据的均值和方差>>> X_scaled.mean(axis=0) array([ 0., 0., 0.]) >>> X_scaled.std(axis=0) array([ 1., 1., 1.])
scaler StandardScaler(copy=True, with_mean=True, with_std=True)
使用上面这个转换器去转换训练数据x,调用transform方法 scaler.transform(x) array([[ 0. , -1.22474487, 1.33630621], [ 1.22474487, 0. , -0.26726124], [-1.22474487, 1.22474487, -1.06904497]]) 好了,比如现在又来了一组新的样本,也想得到相同的转换 new_x = [[-1., 1., 0.]] scaler.transform(new_x) array([[-2.44948974, 1.22474487, -0.26726124]])
另外,与StandardScaler 并列多还有其它多标准化方法:
2、MinMaxScaler,在MinMaxScaler中是给定了一个明确的最大值与最小值,数据会被规模化到[0,1]之间。它的计算公式如下:
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std / (max - min) + min
用法:min_max_scaler = preprocessing.MinMaxScaler()
x_minmax = min_max_scaler.fit_transform(x)
x_minmax
3、MaxAbsScaler,原理与上面的很像,只是数据会被规模化到[-1,1]之间。也就是特征中,所有数据都会除以最大值。这个方法对那些已经中心化均值维0或者稀疏的数据有意义。
max_abs_scaler = preprocessing.MaxAbsScaler()
x_train_maxsbs = max_abs_scaler.fit_transform(x)
x_train_maxsbs
4、RobustScaler
当数据集中含有离群点,即异常值时,可以用z-score进行标准化,但是标准化后的数据并不理想,因为异常点的特征往往在标准化之后容易失去离群特征。此时可以用该方法针对离群点做标准化处理。