Sklearn学习笔记 1-数据预处理
写在开始:Sklearn 预处理
Sklearn 中【数据预处理】
- 工具包:sklearn.preprocessing
- 两大块:特征提取和标准化
- 过程:特征向量 → 特征表达(符合评估器 API的形式)
( raw feature vectors → representation that is more suitable for the downstream estimators)
在一般情况下,学习算法受益于数据集的标准化(standardization)。如果数据集集存在某些异常值,那么稳定的放缩( scalers )和转化(transformers )是比较合适的。有需要,可以在Compare the effect of different scalers on data with outliers 进一步关注不同的放缩器、转化器和正规化器(normalizers)的效果差异。
1. 标准化/去均值和方差缩放:均值为0,方差为1
数据集的标准化 对scikit-learn中实现的大多数机器学习算法来说是常见的要求 。如果个别特征或多或少看起来不是很像标准正态分布(具有零均值和单位方差),那么它们的表现力可能会较差。
在实际情况中,我们经常忽略特征的分布形状,直接经过去均值来对某个特征进行中心化,再通过除以非常量特征(non-constant features)的标准差进行缩放。
-
目的
将数据进行缩放,使其具有零均值及标准方差。 -
原因:
许多学习算法中目标函数的基础都是假设所有的特征都是零均值并且具有同一阶数上的方差。
如果某个特征的方差比其他特征大几个数量级,那么它就会在学习算法中占据主导位置,导致学习器并不能像我们说期望的那样,从其他特征中学习。
StandardScaler()
- 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...]])
- Transformer()
Transformer()是 位于preprocessing 模块——StandardScaler() 类下面 API,它实现了转化器的API来计算训练集上的平均值和标准偏差,以便以后能够在测试集上重新应用相同的变换。
有需要也可以通过在构造函数 StandardScaler 中传入参数 with_mean=False 或者with_std=False 来取消中心化或缩放操作。
>>> scaler = preprocessing.StandardScaler().fit(X_train)
>>> scaler
StandardScaler()
>>> scaler.mean_
array([1. ..., 0. ..., 0.33...])
>>&g