NumPy数据的归一化

数据的归一化

首先咱们来看看归一化的概念:算法

数据的标准化(normalization)和归一化

    数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中常常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不一样单位或量级的指标可以进行比较和加权。其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上。数据结构

    目前数据标准化方法有多种,归结起来能够分为直线型方法(如极值法、标准差法)、折线型方法(如三折线法)、曲线型方法(如半正态性分布)。不一样的标准化方法,对系统的评价结果会产生不一样的影响,然而不幸的是,在数据标准化方法的选择上,尚未通用的法则能够遵循。dom

归一化的目标

1 把数变为(0,1)之间的小数
        主要是为了数据处理方便提出来的,把数据映射到0~1范围以内处理,更加便捷快速,应该归到数字信号处理范畴以内。
2 把有量纲表达式变为无量纲表达式
        归一化是一种简化计算的方式,即将有量纲的表达式,通过变换,化为无量纲的表达式,成为纯量。 好比,复数阻抗能够归一化书写:Z = R + jωL = R(1 + jωL/R) ,复数部分变成了纯数量了,没有量纲。 
另外,微波之中也就是电路分析、信号系统、电磁波传输等,有不少运算均可以如此处理,既保证了运算的便捷,又能凸现出物理量的本质含义。优化

 

归一化后有两个好处

1. 提高模型的收敛速度spa

以下图,x1的取值为0-2000,而x2的取值为1-5,假如只有这两个特征,对其进行优化时,会获得一个窄长的椭圆形,致使在梯度降低时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代很慢,相比之下,右图的迭代就会很快(理解:也就是步长走多走少方向老是对的,不会走偏).net


2.提高模型的精度code

归一化的另外一好处是提升精度,这在涉及到一些距离计算的算法时效果显著,好比算法要计算欧氏距离,上图中x2的取值范围比较小,涉及到距离计算时其对结果的影响远比x1带来的小,因此这就会形成精度的损失。因此归一化颇有必要,他可让各个特征对结果作出的贡献相同。orm

    在多指标评价体系中,因为各评价指标的性质不一样,一般具备不一样的量纲和数量级。当各指标间的水平相差很大时,若是直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的做用,相对削弱数值水平较低指标的做用。所以,为了保证结果的可靠性,须要对原始指标数据进行标准化处理。blog

    在数据分析以前,咱们一般须要先将数据标准化(normalization),利用标准化后的数据进行数据分析。数据标准化也就是统计数据的指数化。数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。数据同趋化处理主要解决不一样性质数据问题,对不一样性质指标直接加总不能正确反映不一样做用力的综合结果,须先考虑改变逆指标数据性质,使全部指标对测评方案的做用力同趋化,再加总才能得出正确结果。数据无量纲化处理主要解决数据的可比性。通过上述标准化处理,原始数据均转换为无量纲化指标测评值,即各指标值都处于同一个数量级别上,能够进行综合测评分析。get

从经验上说,归一化是让不一样维度之间的特征在数值上有必定比较性,能够大大提升分类器的准确性。

 

 

如今咱们再来看看基础的NumPy代码是如何实现的:

>>> x=np.random.random((10,3))
>>> x
array([[0.44951388, 0.58974524, 0.43980589],
       [0.3082853 , 0.71042825, 0.02617535],
       [0.10836115, 0.66774964, 0.85824697],
       [0.01442332, 0.76459011, 0.75151452],
       [0.64054078, 0.02121539, 0.87271819],
       [0.75971598, 0.4268253 , 0.66039724],
       [0.11865255, 0.14679259, 0.53782096],
       [0.85085254, 0.26284603, 0.00246512],
       [0.41957758, 0.96842006, 0.65555725],
       [0.70227785, 0.78120928, 0.54771033]])
>>> x.mean(0)
array([0.43722009, 0.53398219, 0.53524118])
>>> xc=x-x.mean(0)
>>> xc
array([[ 0.01229379,  0.05576305, -0.0954353 ],
       [-0.1289348 ,  0.17644606, -0.50906583],
       [-0.32885894,  0.13376745,  0.32300579],
       [-0.42279677,  0.23060792,  0.21627333],
       [ 0.20332068, -0.5127668 ,  0.33747701],
       [ 0.32249589, -0.10715689,  0.12515606],
       [-0.31856754, -0.3871896 ,  0.00257978],
       [ 0.41363245, -0.27113616, -0.53277606],
       [-0.01764252,  0.43443787,  0.12031607],
       [ 0.26505776,  0.24722709,  0.01246915]])
>>> xc.mean(0)
array([ 5.55111512e-18,  3.33066907e-17, -4.44089210e-17])

由于最后归一化的均值在0附近,所以在机器精度范围以内,该均值为0。

相关文章
相关标签/搜索