包:sklearn.preprocessing提供了一些实用的公共函数和转化类
- 标准化,或称为去平均和方差缩放
对一个数据集进行标准化是大部分机器学习估测器的要求
scikit-learn中的许多学习器都需要将数据集进行标准化处理。数据集的标准化:当个体特征太过或明显不遵从高斯正态分布时,标准化表现的效果较差。实际操作中,经常忽略特征数据的分布形状,移除每个特征均值,划分离散特征的标准差,从而等级化,进而实现数据中心化。
例如,用于学习算法(例如支持向量机的RBF内核或线性模型的l1和l2正则化器)的目标函数中,假设所有特征都以零为中心并且具有相同量级的方差。如果某一个特征的方差大于其他数量级,则可能会对目标函数影响较大,使学习器无法按预期正确地学习其他特征。
函数scale提供了一种快速简单的方法来在单个阵列数据集上执行此操作:
公式为:(X-mean)/std 计算时对每个属性/每列分别进行。
将数据按期属性(按列进行)减去其均值,并处以其方差。得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1。
>>> from sklearn import preprocessing >>> import numpy as np >>> X_train = np.array([[ 1., -1., 2.], ... [ 2., 0., 0.], ... [ 0., 1., -1.]]) >>> X_scaled = preprocessing.scale(X_train) >>> X_scaled array([[ 0. ..., -1.22..., 1.33...], [ 1.22..., 0. ..., -0.26...], [-1.22..., 1.22..., -1.06...]])
Scaled data has zero mean and unit variance:
>>> X_scaled.mean(axis=0) array([ 0., 0., 0.]) >>> X_scaled.std(axis=0) array([ 1., 1., 1.])
!!!提供一个API,对训练集进行标准化,对测试集做同样的标准化
>>> scaler = preprocessing.StandardScaler().fit(X_train) >>> scaler StandardScaler(copy=True, with_mean=True, with_std=True) >>> scaler.mean_ array([ 1. ..., 0. ..., 0.33...]) >>> scaler.scale_ array([ 0.81..., 0.81..., 1.24...]) >>> scaler.transform(X_train) array([[ 0. ..., -1.22..., 1.33...], [ 1.22..., 0. ..., -0.26...], [-1.22..., 1.22..., -1.06...]])
这个scaler能在新的数据集上做和训练集上同样的缩放转换
注 :
1)若设置with_mean=False 或者 with_std=False,则不做centering 或者scaling处理。
2)scale和StandardScaler可以用于回归模型中的目标值处理。