机器学习之数据标准化(归一化)

分类: 机器学习 |
一、什么是标准化?
归一化化定义:归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。使它们之间的可比性更显然,更强,比如对数归一,指数归一,三角or反三角函数归一等,归一的目的可能是使得没有可比性的数据变得具有可比性,但又还会保持相比较的两个数据之间的相对关系,如大小关系,大的仍然大,小的仍然小。
机器学习中标准化数据特征有两种方法:
归一化(normalization): http://s3/mw690/002aDypHzy7lgnVROp462&690
标准化(standardization): http://s7/mw690/002aDypHzy7lgnZCeBUa6&690
其中 https://www.zhihu.com/equation?tex=/sigma 代表样本的均值和标准差,
为最大值,
为最小值。
1、归一化和标准化 的本质:
先看归一化,在数据给定的前提下,令常数
,常数
,那么归一化的新的形式就是
。在这种改写后下,易发现和标准化形式
类似,因为在数据给定后
https://www.zhihu.com/equation?tex=/sigma
也可看做常数。
因此可以再稍微变形一下:http://s11/mw690/002aDypHzy7lgo2dsZs8a&690
(公式1)
(公式1)
就发现事实上就是对向量 https://www.zhihu.com/equation?tex=c。所以归一化和标准化的本质就是一种线性变换。
举个简单的例子:
- 原始数据:
,其中
,
,
- 归一化:代入公式1,将 https://www.zhihu.com/equation?tex=X 压缩4倍并平移
,得到
,最终有
- 标准化:同理可得
2、线性变化的性质:
线性变换有很多良好的性质,这些性质决定了为什么对数据进行改变后竟然不会造成“失效”,反而还能提高数据的表现。拿其中很重要的一个性质为例,线性变化不改变原始数据的数值排序。
感兴趣的朋友可以试试下面的代码,就会发现这两种处理方法都不会改变数据的排序。对于很多模型来说,这个性质保证了数据依然有意义,顺序性不变,而不会造成了额外的影响。
from sklearn import preprocessing
from scipy.stats import rankdata
x = [[1], [3], [34], [21], [10], [12]]
std_x = preprocessing.StandardScaler().fit_transform(x)
norm_x = preprocessing.MinMaxScaler().fit_transform(x)
print('原始顺序 :', rankdata(x))
print('标准化顺序:', rankdata(std_x))
print('归一化顺序:', rankdata(norm_x)
只是因为线性变换保持线性组合与线性关系式不变,这保证了特定模型不会失效。3、归一化和标准化的区别
在不涉及线性代数的前提下,我们给出一些直觉的解释:归一化的缩放是“拍扁”统一到区间(仅由极值决定),而标准化的缩放是更加“弹性”和“动态”的,和整体样本的分布有很大的关系。值得注意:
归一化:缩放仅仅跟最大、最小值的差别有关。
标准化:缩放和每个点都有关系,通过方差(variance)体现出来。与归一化对比,标准化中所有数据点都有贡献(通过均值和标准差造成影响)。
当数据较为集中时, https://www.zhihu.com/equation?tex=/alpha
更小,于是数据在标准化后就会更加分散。如果数据本身分布很广,那么 https://www.zhihu.com/equation?tex=/alpha
较大,数据就会被集中到更小的范围内。
从输出范围角度来看,
必须在0-1间。对比来看,显然
,甚至在极端情况下
https://www.zhihu.com/equation?tex=/sigma=0
,所以标准化的输出范围一定比归一化更广。
- 归一化: 输出范围在0-1之间
- 标准化:输出范围是负无穷到正无穷
二、为什么要标准化归一化?
假定为预测房价的例子,自变量为面积,房间数两个,因变量为房价。
那么可以得到的公式为:http://s3/mw690/002aDypHzy7lgr5mdZod2&690
其中
代表房间数,
代表
变量前面的系数。
其中
代表面积,
代表
变量前面的系数。
首先我们祭出两张图代表数据是否均一化的最优解寻解过程。
未归一化:
归一化之后
上述两幅图代码的是损失函数的等高线。
我们很容易看出,当数据没有归一化的时候,面积数的范围可以从0~1000,房间数的范围一般为0~10,可以看出面积数的取值范围远大于房间数。
这样造成的影响就是在画损失函数的时候,
数据没有归一化的表达式,可以为:http://s5/mw690/002aDypHzy7lgrpuNow74&690
造成图像的等高线为类似椭圆形状,最优解的寻优过程就是像下图所示:
http://s9/mw690/002aDypHzy7lgrsfxBmf8&690
而数据归一化之后,损失函数的表达式可以表示为:http://s6/mw690/002aDypHzy7lgrtBDLfd5&690
其中变量的前面系数几乎一样,则图像的等高线为类似圆形形状,最优解的寻优过程像下图所示:
http://s8/mw690/002aDypHzy7lgrvAYyb27&690
从上可以看出,数据归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。这也是数据为什么要归一化的一个原因。
前一篇:机器学习中如何避免过拟合