神经网络输入数据预处理——数据标准化(归一化)——python
程序员文章站
2022-07-16 18:20:23
...
数据的标准化和归一化
数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上。
目前数据标准化方法有多种,归结起来可以分为直线型方法(如极值法、标准差法)、折线型方法(如三折线法)、曲线型方法(如半正态性分布)。不同的标准化方法,对系统的评价结果会产生不同的影响,然而不幸的是,在数据标准化方法的选择上,还没有通用的法则可以遵循。
归一化后有两个好处
- 提升模型的收敛速度
如下图,x1的取值为0-2000,而x2的取值为1-5,假如只有这两个特征,对其进行优化时,会得到一个窄长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代很慢,相比之下,右图的迭代就会很快(理解:也就是步长走多走少方向总是对的,不会走偏)
- 提升模型的精度
归一化的另一好处是提高精度,这在涉及到一些距离计算的算法时效果显著,比如算法要计算欧氏距离,上图中x2的取值范围比较小,涉及到距离计算时其对结果的影响远比x1带来的小,所以这就会造成精度的损失。所以归一化很有必要,他可以让各个特征对结果做出的贡献相同。
从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。
三种常见的转换方法
- 极值法(区间缩放法)
线性比例变换法:
- 正向指标:y = (x)/(max),即新数据=(原数据)/(最大值)。
- 负向指标:y = (min)/(x),即新数据=(最小值)/(原数据)。
极差变换法:
- 正向指标:y = (x- min)/(max - min),即新数据=(原数据-最小值)/(最大值-最小值)。
- 负向指标:y = (max - x)/(max - min),即新数据=(最大值-原数据)/(最大值-最小值)。
-
比重法
L2正则化:y = x/sqrt(Σx^2),即新数据=(原数据)/sqrt(平方和),被称为L2正则转换。
正则化则是通过范数规则来约束特征属性,通过正则化我们可以降低数据训练处来的模 型的过拟合可能,和机器学习中所讲述的L1、L2正则的效果一样。在进行正则化 操作的过程中,不会改变数据的分布情况,但是会改变数据特征之间的相关特性。 -
标准化
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
原函数
归一化后
参考资料
- https://blog.csdn.net/Geeksongs/article/details/91913436
- https://blog.csdn.net/Trisyp/article/details/89371094