加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2018-06-15 00:12:25)
分类: 机器学习
一、什么是标准化?
归一化化定义:归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。使它们之间的可比性更显然,更强,比如对数归一,指数归一,三角or反三角函数归一等,归一的目的可能是使得没有可比性的数据变得具有可比性,但又还会保持相比较的两个数据之间的相对关系,如大小关系,大的仍然大,小的仍然小。
机器学习中标准化数据特征有两种方法:
归一化(normalization): http://s3/mw690/002aDypHzy7lgnVROp462&690


标准化(standardization): http://s7/mw690/002aDypHzy7lgnZCeBUa6&690

其中 https://www.zhihu.com/equation?tex=/sigma 代表样本的均值和标准差, X_{max} 为最大值, X_{min} 为最小值。

1、归一化和标准化 的本质:
先看归一化,在数据给定的前提下,令常数 \alpha={X_{max}-X_{min}} ,常数 \beta=X_{min} ,那么归一化的新的形式就是 \frac{X_i-\beta}{\alpha} 。在这种改写后下,易发现和标准化形式 \frac{X_i-\mu}{\sigma} 类似,因为在数据给定后 https://www.zhihu.com/equation?tex=/sigma 也可看做常数。
因此可以再稍微变形一下:http://s11/mw690/002aDypHzy7lgo2dsZs8a&690

公式1
就发现事实上就是对向量 https://www.zhihu.com/equation?tex=c。所以归一化和标准化的本质就是一种线性变换。

举个简单的例子:


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 较大,数据就会被集中到更小的范围内。
从输出范围角度来看, \frac{X_i-X_{min}}{X_{max}-X_{min}} 必须在0-1间。对比来看,显然 \sigma\leq X_{max}-X_{min},甚至在极端情况下 https://www.zhihu.com/equation?tex=/sigma=0 ,所以标准化的输出范围一定比归一化更广。
  • 归一化: 输出范围在0-1之间
  • 标准化:输出范围是负无穷到正无穷


二、为什么要标准化归一化?

假定为预测房价的例子,自变量为面积,房间数两个,因变量为房价。
那么可以得到的公式为:http://s3/mw690/002aDypHzy7lgr5mdZod2&690
其中x_{1} 代表房间数,\theta _{1} 代表x_{1} 变量前面的系数。
其中x_{2} 代表面积,\theta _{2} 代表x_{2} 变量前面的系数。
首先我们祭出两张图代表数据是否均一化的最优解寻解过程。
未归一化:

归一化之后
http://s7/mw690/002aDypHzy7lgrl535c96&690

我们在寻找最优解的过程也就是在使得损失函数值最小的theta1,theta2
上述两幅图代码的是损失函数的等高线。
我们很容易看出,当数据没有归一化的时候,面积数的范围可以从0~1000,房间数的范围一般为0~10,可以看出面积数的取值范围远大于房间数。

这样造成的影响就是在画损失函数的时候,

数据没有归一化的表达式,可以为:http://s5/mw690/002aDypHzy7lgrpuNow74&690

造成图像的等高线为类似椭圆形状,最优解的寻优过程就是像下图所示:

http://s9/mw690/002aDypHzy7lgrsfxBmf8&690

而数据归一化之后,损失函数的表达式可以表示为:http://s6/mw690/002aDypHzy7lgrtBDLfd5&690
其中变量的前面系数几乎一样,则图像的等高线为类似圆形形状,最优解的寻优过程像下图所示:

http://s8/mw690/002aDypHzy7lgrvAYyb27&690

从上可以看出,数据归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。这也是数据为什么要归一化的一个原因。


参考:https://www.zhihu.com/question/20455227

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有