为什么需要数据预处理:
1)在真实数据中,我们拿到的数据可能包含了大量的缺失值,可能包含大量的噪音,也可能因为人工录入错误导致有异常点存在,非常不利于算法模型的训练。
2)数据预处理的目的是对各种脏数据进行对应方式的处理,得到标准的、干净的、连续的数据,提供给数据统计、数据挖掘等使用。
数据处理如何做
1)标准化:去平均值 和方差缩放(Standardization, or mean removal and variance scaling)
对很多学习算法来说数据集的标准化是共同的要求,有时候单个特征如果不是或多或少的近似正态分布时,那么学习算法可能表现的十分糟糕。
将特征数据的分布调整成标准正太分布,也叫高斯分布,也就是使得数据的均值维0,方差为1
标准化的原因在于如果有些特征的方差过大,则会主导目标函数从而使参数估计器无法正确地去学习其他特征。
标准化过程分为2步:去均值的中心化(均值变为0);方差的规模化(方差变为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.])
2 规模化特征到一定的范围内( Scaling features to a range)
也就是使得特征的分布是在一个给定最小值和最大值的范围内的。一般情况下是在[0,1]之间,或者是特征中绝对值最大的那个数为1,其他数以此维标准分布在[[-1,1]之间
之所以要将特征缩放到一定的范围内,目的是对付那些标准差相当小的特征并保留下稀疏数据中的0
3 归一化 Normalization
归一化是将单个的样本特征向量变成具有单位长度(unit norm)的特征向量的过程。经常被使用在分类与聚类中
4 二值化
这里的二值化,指的是特征二值化,即,将数量特征按阈值转换为二值的过程
5 缺失值
由于各种各样的原因,很多真实世界的数据集包括缺失值,可以丢弃那些包括缺失值的行或列,然而,这样做可能损失了有价值的数据。一个更好的策略是填补这些缺失值,即,根据已知的数据推断它们的值。
可以使用缺失值所在的行或列的均值、中位数、频数最大的值来填补缺失值。
6 产生多项式特征
为输入数据添加非线性特征可以增加模型的复杂度,实现这一点的常用的简单方法是使用多项式特征,他可以引入特征的高阶项和互乘积项。
Sklearn的类PolynomialFeatures可以用来在输入数据的基础上构造多项式特征