工业数据分析之数据归一化 | 冰水数据智能专题 | 2nd

时间:2022-07-22
本文章向大家介绍工业数据分析之数据归一化 | 冰水数据智能专题 | 2nd,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1数据归一化

归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保证程序运行时收敛加快。归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在某个区间上是统计的坐标分布。归一化有同一、统一和合一的意思。

2数据归一化的目标

(1)把数变为(0,1)之间的小数

主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速,应该归到数字信号处理范畴之内。

(2)把有量纲表达式变为无量纲表达式

归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。 比如,复数阻抗可以归一化书写:Z = R + jωL = R(1 + jωL/R) ,复数部分变成了纯数量了,没有量纲。

另外,微波之中也就是电路分析、信号系统、电磁波传输等,有很多运算都可以如此处理,既保证了运算的便捷,又能凸现出物理量的本质含义。

3数据归一化的作用

数据归一化问题是数据挖掘中特征向量表达时的重要问题,当不同的特征成列在一起的时候,由于特征本身表达方式的原因而导致在绝对数值上的小数据被大数据“吃掉”的情况,这个时候我们需要做的就是对抽取出来的features vector进行归一化处理,以保证每个特征被分类器平等对待。

(1)提升模型的收敛速度

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

(2)提升模型的精度

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

(3)深度学习中数据归一化可以防止模型梯度爆炸。

4 数据归一化主要方法

特征归一化常用的方法包含如下几种:

• 简单缩放

• 逐样本均值消减(也称为移除直流分量)

• 特征标准化(使数据集中所有特征都具有零均值和单位方差)

一般做机器学习应用的时候大部分时间是花费在特征处理上,其中很关键的一步就是对特征数据进行归一化。

• 归一化后加快了梯度下降求最优解的速度;

• 归一化有可能提高精度;

(1)简单缩放 | min-max标准化(Min-max normalization) | 离差标准化

在简单缩放中,我们的目的是通过对数据的每一个维度的值进行重新调节(这些维度可能是相互独立的),使得最终的数据向量落在 [0,1]或[ − 1,1] 的区间内(根据数据情况而定)。这对后续的处理十分重要,因为很多默认参数(如 PCA-白化中的 epsilon)都假定数据已被缩放到合理区间。 例子:在处理自然图像时,我们获得的像素值在 [0,255] 区间中,常用的处理是将这些像素值除以 255,使它们缩放到 [0,1] 中.

这种算法是对原始数据的线性变换,使结果落到[0,1]区间,转换函数如下:

x = (x - min)/(max - min)

max: 样本数据的最大值

min: 为样本数据的最小值

这种归一化方法比较适用在数值比较集中的情况。但是,如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定,实际使用中可以用经验常量值来替代max和min。而且当有新数据加入时,可能导致max和min的变化,需要重新定义。

在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

(2)标准差标准化 | z-score 0均值标准化(zero-mean normalization)

经过处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数为:

• x = (x - u)/σ

o u: 所有样本数据的均值

o σ: 为所有样本数据的标准差。

在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。

(3)非线性归一化

经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括 log、指数,正切等。需要根据数据分布的情况,决定非线性函数的曲线,比如log(V, 2)还是log(V, 10)等。

5数据归一化的实现代码

对二维数组进行线性归一化:

def max_min_normalization(data_value, data_col_max_values, data_col_min_values):
""" Data normalization using max value and min value
Args:
   data_value: The data to be normalized
   data_col_max_values: The maximum value of data's columns
   data_col_min_values: The minimum value of data's columns
"""
data_shape = data_value.shape
data_rows = data_shape[0]
data_cols = data_shape[1]
for i in xrange(0, data_rows, 1):
   for j in xrange(0, data_cols, 1):
       data_value[i][j] =
           (data_value[i][j] - data_col_min_values[j]) /
           (data_col_max_values[j] - data_col_min_values[j])

标准差归一化

def standard_deviation_normalization(data_value, data_col_means,
                                data_col_standard_deviation):
""" Data normalization using standard deviation
Args:
   data_value: The data to be normalized
   data_col_means: The means of data's columns
   data_col_standard_deviation: The variance of data's columns
"""
data_shape = data_value.shape
data_rows = data_shape[0]
data_cols = data_shape[1]
for i in xrange(0, data_rows, 1):
   for j in xrange(0, data_cols, 1):
       data_value[i][j] =
           (data_value[i][j] - data_col_means[j]) /
           data_col_standard_deviation[j]

非线性归一化(以lg为例)

def nonlinearity_normalization_lg(data_value_after_lg,
                             data_col_max_values_after_lg):
""" Data normalization using lg
Args:
   data_value_after_lg: The data to be normalized
   data_col_max_values_after_lg: The maximum value of data's columns
"""
data_shape = data_value_after_lg.shape
data_rows = data_shape[0]
data_cols = data_shape[1]
for i in xrange(0, data_rows, 1):
   for j in xrange(0, data_cols, 1):
       data_value_after_lg[i][j] =
           data_value_after_lg[i][j] / data_col_max_values_after_lg[j]