一般,在Data Science中,预处理数据有一个很关键的步骤就是数据的标准化。这里主要引用sklearn文档中的一些东西来讲明,主要把各个标准化方法的应用场景以及优缺点总结归纳,以来充当笔记。html
首先,我要引用我本身的文章Feature Preprocessing on Kaggle里面关于Scaling的描述算法
Tree-based models doesn’t depend on scalingapache
Non-tree-based models hugely depend on scaling网络
在机器学习算法的目标函数(例如SVM的RBF内核或线性模型的l1和l2正则化),许多学习算法中目标函数的基础都是假设全部的特征都是零均值而且具备同一阶数上的方差。若是某个特征的方差比其余特征大几个数量级,那么它就会在学习算法中占据主导位置,致使学习器并不能像咱们说指望的那样,从其余特征中学习。机器学习
举一个简单的例子,在KNN中,咱们须要计算待分类点与全部实例点的距离。假设每一个实例点(instance)由n个features构成。若是咱们选用的距离度量为欧式距离,若是数据预先没有通过归一化,那么那些绝对值大的features在欧式距离计算的时候起了决定性做用,soga。函数
从经验上说,归一化是让不一样维度之间的特征在数值上有必定比较性,能够大大提升分类器的准确性。学习
对于线性model来讲,数据归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。
.net
比较这两个图,前者是没有通过归一化的,在梯度降低的过程当中,走的路径更加的曲折,而第二个图明显路径更加平缓,收敛速度更快。3d
sklearn的preprocessing
提供了能够知足需求的归一化方法:code
标准化数据经过减去均值而后除以方差(或标准差),这种数据标准化方法通过处理后数据符合标准正态分布,即均值为0,标准差为1,转化函数为:
x =(x - 𝜇)/𝜎
适用于:若是数据的分布自己就服从正态分布,就能够用这个方法。
一般这种方法基本可用于有outlier的状况,可是,在计算方差和均值的时候outliers仍然会影响计算。因此,在出现outliers的状况下可能会出现转换后的数的不一样feature分布彻底不一样的状况。
以下图,通过StandardScaler以后,横坐标与纵坐标的分布出现了很大的差别,这多是outliers形成的。
将特征缩放至特定区间,将特征缩放到给定的最小值和最大值之间,或者也能够将每一个特征的最大绝对值转换至单位大小。这种方法是对原始数据的线性变换,将数据归一到[0,1]中间。转换函数为:
x = (x-min)/(max-min)
这种方法有个缺陷就是当有新数据加入时,可能致使max和min的变化,须要从新定义。
敲黑板,这种方法对于outlier很是敏感,由于outlier影响了max或min值,因此这种方法只适用于数据在一个范围内分布的状况
若是你的数据包含许多异常值,使用均值和方差缩放可能并非一个很好的选择。这种状况下,你可使用 robust_scale 以及 RobustScaler 做为替代品。它们对你的数据的中心和范围使用更有鲁棒性的估计。
This Scaler removes the median(中位数) and scales the data according to the quantile range(四分位距离,也就是说排除了outliers)
假设咱们有一个只有一个hidden layer的多层感知机(MLP)的分类问题。每一个hidden unit表示一个超平面,每一个超平面是一个分类边界。参数w(weight)决定超平面的方向,参数b(bias)决定超平面离原点的距离。若是b是一些小的随机参数(事实上,b确实被初始化为很小的随机参数),那么全部的超平面都几乎穿过原点。因此,若是data没有中心化在原点周围,那么这个超平面可能没有穿过这些data,也就是说,这些data都在超平面的一侧。这样的话,局部极小点(local minima)颇有可能出现。 因此,在这种状况下,标准化到[-1, 1]比[0, 1]更好。
一、在分类、聚类算法中,须要使用距离来度量类似性的时候、或者使用PCA技术进行降维的时候,StandardScaler表现更好。
二、在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可使用MinMaxScaler。好比图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。
缘由是使用MinMaxScaler,其协方差产生了倍数值的缩放,所以这种方式没法消除量纲对方差、协方差的影响,对PCA分析影响巨大;同时,因为量纲的存在,使用不一样的量纲、距离的计算结果会不一样。
而在StandardScaler中,新的数据因为对方差进行了归一化,这时候每一个维度的量纲其实已经等价了,每一个维度都服从均值为0、方差1的正态分布,在计算距离的时候,每一个维度都是去量纲化的,避免了不一样量纲的选取对距离计算产生的巨大影响。