欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

神经网络输入数据预处理——数据标准化(归一化)——python

程序员文章站 2022-07-16 18:20:23
...

数据的标准化和归一化

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

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

归一化后有两个好处

  1. 提升模型的收敛速度
    如下图,x1的取值为0-2000,而x2的取值为1-5,假如只有这两个特征,对其进行优化时,会得到一个窄长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代很慢,相比之下,右图的迭代就会很快(理解:也就是步长走多走少方向总是对的,不会走偏)
    神经网络输入数据预处理——数据标准化(归一化)——python
  2. 提升模型的精度
    归一化的另一好处是提高精度,这在涉及到一些距离计算的算法时效果显著,比如算法要计算欧氏距离,上图中x2的取值范围比较小,涉及到距离计算时其对结果的影响远比x1带来的小,所以这就会造成精度的损失。所以归一化很有必要,他可以让各个特征对结果做出的贡献相同。

从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。

三种常见的转换方法

  1. 极值法(区间缩放法)

线性比例变换法:

  • 正向指标:y = (x)/(max),即新数据=(原数据)/(最大值)。
  • 负向指标:y = (min)/(x),即新数据=(最小值)/(原数据)。

极差变换法:

  • 正向指标:y = (x- min)/(max - min),即新数据=(原数据-最小值)/(最大值-最小值)。
  • 负向指标:y = (max - x)/(max - min),即新数据=(最大值-原数据)/(最大值-最小值)。
  1. 比重法
    L2正则化:y = x/sqrt(Σx^2),即新数据=(原数据)/sqrt(平方和),被称为L2正则转换。
    正则化则是通过范数规则来约束特征属性,通过正则化我们可以降低数据训练处来的模 型的过拟合可能,和机器学习中所讲述的L1、L2正则的效果一样。在进行正则化 操作的过程中,不会改变数据的分布情况,但是会改变数据特征之间的相关特性。

  2. 标准化
    Z-score:y = (x - mean)/σ,基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化,经过处理的数据符合标准正态分布,即均值为0,标准差为1。

(0,1)标准化具体代码

def noramlization(data):
    minVals = data.min(0)
    maxVals = data.max(0)
    ranges = maxVals - minVals
    normData = (data - minVals)/ranges
    return normData

list与array互相转换

a= array([[1,2],[3,4]]) #a为array
l = a.tolist()   #array转换为list

l2=[1,2,3,4]
a2 = np.array(l2)    #list转换为array

原函数
神经网络输入数据预处理——数据标准化(归一化)——python
归一化后神经网络输入数据预处理——数据标准化(归一化)——python

参考资料

  1. https://blog.csdn.net/Geeksongs/article/details/91913436
  2. https://blog.csdn.net/Trisyp/article/details/89371094