API - 剖析归一化和标准化

一、函数对比


1、使用 sklearn.preprocessing.scale ,可以直接将给定数据进行标准化。

API - 剖析归一化和标准化_第1张图片
scale

2、使用 sklearn.preprocessing.StandardScale 的好处在于可以保存训练集中的参数(均值、方差)直接使用其对象转换测试集数据。

API - 剖析归一化和标准化_第2张图片
StandardScale

使用sklearn.preprocessing.MinMaxScaler将属性缩放到一个指定的最大和最小值(通常是1-0)之间。

API - 剖析归一化和标准化_第3张图片

当然,在构造类对象的时候也可以直接指定最大最小值的范围:feature_range=(min, max),此时应用的公式变为:

X_std=(X-X.min(axis=0))/(X.max(axis=0)-X.min(axis=0))
X_scaled=X_std/(max-min)+min

目的包括:
1、对于方差非常小的属性可以增强其稳定性。
2、维持稀疏矩阵中为0的条目。



sklearn.preprocessing.normalize

本文主要讲归一化和标准化的区别,对文献中的正则化不做解释。有兴趣看原文:
关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化


二、公式对比

常用的方法是z-score标准化,经过处理后的数据均值为0,标准差为1,公式是:

将训练集中某一列数值特征(列)的值缩放成均值为0,方差为1的状态

常用的方法是通过对原始数据进行线性变换把数据映射到[0,1]之间,公式是:

将训练集中某一列数值特征(列)的值缩放到0和1之间

其中max为样本数据的最大值,min为样本数据的最小值。这种方法有个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。

不同变量往往量纲不同,归一化可以消除量纲对最终结果的影响,使不同变量具有可比性。
在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用归一化方法。
比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。


三、面试考点

1、线性代数和特征工程标准化的区别
在线性代数中,将一个向量除以向量的长度,也被称为标准化。不过这里的标准化是将向量变为长度为1的单位向量,它和我们这里的标准化不是一回事儿。

2、 标准化和归一化的对比分析
首先明确,在机器学习中,标准化更常用的手段,归一化的应用场景是有限的。我总结原因有两点:

● 标准化更好保持了样本间距。
当样本中有异常点时,归一化有可能将正常的样本“挤”到一起去。比如三个样本,某个特征的值为1,2,10000,假设10000这个值是异常值,用归一化的方法后,正常的1,2就会被“挤”到一起去。如果不幸的是1和2的分类标签还是相反的,那么,当我们用梯度下降来做分类模型训练时,模型会需要更长的时间收敛,因为将样本分开需要更大的努力!而标准化在这方面就做得很好,至少它不会将样本“挤到一起”。

● 标准化更符合统计学假设
对一个数值特征来说,很大可能它是服从正态分布的。标准化其实是基于这个隐含假设,只不过是略施小技,将这个正态分布调整为均值为0,方差为1的标准正态分布而已。

● 在涉及到计算点与点之间的距离时,使用归一化或标准化都会对最后的结果有所提升,甚至会有质的区别。

3、归一化与标准化之间应该如何选择呢?
1、如果把所有维度的变量一视同仁,在最后计算距离中发挥相同的作用应该选择标准化。
2、如果想保留原始数据中由标准差所反映的潜在权重关系应该选择归一化。
3、标准化更适合现代嘈杂大数据场景。

4、逻辑回归必须要进行标准化吗?
如果你不用正则,那么,标准化并不是必须的,如果你用正则,那么标准化是必须的。
● 不用正则时,我们的损失函数只是仅仅在度量预测与真实的差距。
● 加上正则后,我们的损失函数除了要度量上面的差距外,还要度量参数值是否足够小。而参数值的大小程度或者说大小的级别是与特征的数值范围相关的。

举例
我们用体重预测身高,体重用kg衡量时,训练出的模型是:
身高 = 体重*x
x就是我们训练出来的参数。
当我们的体重用吨来衡量时,x的值就会扩大为原来的1000倍。
在上面两种情况下,都用L1正则的话,显然对模型的训练影响是不同的。

假如不同的特征的数值范围不一样,有的是0到0.1,有的是100到10000,那么,每个特征对应的参数大小级别也会不一样,在L1正则时,我们是简单将参数的绝对值相加,因为它们的大小级别不一样,就会导致L1最后只会对那些级别比较大的参数有作用,那些小的参数都被忽略了。

5、如果不用正则,那么标准化对逻辑回归有什么好处吗?
有好处,进行标准化后,我们得出的参数值的大小可以反应出不同特征对样本label的贡献度,方便我们进行特征筛选。如果不做标准化,是不能这样来筛选特征的。

6、做标准化有什么注意事项吗?
最大的注意事项就是先拆分出test集,不要在整个数据集上做标准化,因为那样会将test集的信息引入到训练集中,这是一个非常容易犯的错误!

参考:
机器学习面试之归一化与标准化

还有这篇文章里讲归一化作用的内容比较好,但是对标准化和归一化的概念理解上有问题:
处理数据时不进行归一化会有什么影响?归一化的作用是什么?什么时候需要归一化?有哪些归一化的方法?

你可能感兴趣的:(API - 剖析归一化和标准化)