数据预处理

2018-07-11  本文已影响0人  BlueFishMan

标准化,或平均去除和方差缩放

  1. 函数scale提供了一种快速简便的方法来在单个类似数组的数据集上执行此操作:
>>> 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...]])

缩放数据具有零均值和单位差异:

>>> X_scaled.mean(axis=0)
array([ 0.,  0.,  0.])

>>> X_scaled.std(axis=0)
array([ 1.,  1.,  1.])
  1. 预处理模块还提供了一个实用程序类StandardScaler,它实现了Transformer API来计算训练集上的平均值和标准差,以便稍后能够在测试集上重新应用相同的转换。 因此该类适用于sklearn.pipeline.Pipeline的早期步骤:
>>> 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...]])

然后可以使用缩放实例对新数据进行转换,方法与在训练集上的转换方式相同:

>>> X_test = [[-1., 1., 0.]]
>>> scaler.transform(X_test)                
array([[-2.44...,  1.22..., -0.26...]])

可以通过将with_mean = False或with_std = False传递给StandardScaler的构造函数来禁用居中或缩放。

  1. 以下是将玩具数据矩阵缩放到[0,1]范围的示例:
>>> X_train = np.array([[ 1., -1.,  2.],
...                     [ 2.,  0.,  0.],
...                     [ 0.,  1., -1.]])
...
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[ 0.5       ,  0.        ,  1.        ],
       [ 1.        ,  0.5       ,  0.33333333],
       [ 0.        ,  1.        ,  0.        ]])

然后可以将相同的变压器实例应用于拟合呼叫期间不可见的一些新的测试数据:将应用相同的缩放和移位操作以与在列车数据上执行的变换一致:

>>> X_test = np.array([[ -3., -1.,  4.]])
>>> X_test_minmax = min_max_scaler.transform(X_test)
>>> X_test_minmax
array([[-1.5       ,  0.        ,  1.66666667]])

可以反思缩放属性以查找有关在训练数据上学习的转换的确切性质:

>>> min_max_scaler.scale_                             
array([ 0.5       ,  0.5       ,  0.33...])

>>> min_max_scaler.min_                               
array([ 0.        ,  0.5       ,  0.33...])

如果给MinMaxScaler一个明确的feature_range =(min,max),完整的公式为:

X_{std} = \frac{X - X.min}{ X.max - X.min}

X_{scaled} = X_{std} * (max - min) + min
  1. MaxAbsScaler以非常相似的方式工作,但通过划分每个要素中的最大最大值来训练数据在[-1,1]范围内的比例。 这意味着数据已经集中在零或稀疏数据。
>>> X_train = np.array([[ 1., -1.,  2.],
...                     [ 2.,  0.,  0.],
...                     [ 0.,  1., -1.]])
...
>>> max_abs_scaler = preprocessing.MaxAbsScaler()
>>> X_train_maxabs = max_abs_scaler.fit_transform(X_train)
>>> X_train_maxabs                # doctest +NORMALIZE_WHITESPACE^
array([[ 0.5, -1. ,  1. ],
       [ 1. ,  0. ,  0. ],
       [ 0. ,  1. , -0.5]])
>>> X_test = np.array([[ -3., -1.,  4.]])
>>> X_test_maxabs = max_abs_scaler.transform(X_test)
>>> X_test_maxabs                 
array([[-1.5, -1. ,  2. ]])
>>> max_abs_scaler.scale_         
array([ 2.,  1.,  2.])
上一篇下一篇

猜你喜欢

热点阅读