数据预处理的原因

  • 在神经网络进行模型训练之前,通常会对数据进行预处理以提高模型的性能和稳定性,同时加快模型的收敛速度。采用的数据预处理方法如主成分分析(PCA)、最小最大归一化(MinMaxNormalization)、标准化(ZScore)等,在数据增强方面可以通过进行旋转、裁剪等方式增加训练数据样本。
  • 其实数据需不需要预处理,对于一些较为简单的任务,数据在不进行预处理的情况下也可以表现出很好的效果,当然进行数据预处理后效果较比于不处理的情况下会有所提升。哪为什么进行数据预处理后模型的稳定性和性能就会提高呢?原因有以下几点(个人、经验):
    1. 减少计算量:在对于高维度数据,也就是高维度输入或输出,其中包含着一些无关或者冗余的特征,通过清洗去掉这些特征(降维,如PCA)不仅可以减少模型的复杂度,让模型更好的学习映射输入特征与输出的复杂关系,还能减少模型的计算量加快收敛速度,毕竟在神经网络层与层之间的关系是乘积关系,在一些较小网络模型下计算量变化不大还可以接受,但在一些较大的网络模型中,计算量的增加可是成倍数的。
    2. 数值量级对应:在多维度输入特征时,由于任务的特征各式各样,特征之间就会存在数值量级差异,如:房价预测中,浴室的个数(个位数,不会太大)与卧室的面积或者花园的面积(上百平方左右, $10^{2}$~$10^{3}$ 量级)就会存在量级差异,其实房价预测任务也还好,差异并没有太过,但是在一些领域工程上是普遍存在量级差异过大情况的。如果不进行归一化或者标准化,量级差异带来的危害就会导致模型训练产生较大的波动性,模型参数出现大幅度震荡。比如:量级大的特征参数对应的权重$w$就会很小,量级小的权重$w$可能会很大,这不仅导致权重$w$之间的差异,而且当模型训练的前后传播过程中,随着训练集样本的批量训练,量级大的特征参数值在批量训练之间跳动的幅度比例小时,特征参数的权重$w$的更新可能就会产生大跨越的情况,反之。故采用归一化或标准化将特征进行压缩,从而避免量级差异。
    3. 损失值误差:如果对于量级较大的输出值,损失值计算的时候会产生较大的损失值,这对于梯度下降,方向传播参数迭代更新会相比于进行标准化或归一化的输出值的参数迭代更新速度慢,而且损失值易出现震荡现象,即不稳定。
    4. 激活函数初始化应用:在很多激活函数中可以发现,其非线性区域都是相较于“窄”的,如:Sigmoid激活函数,Tanh激活函数等,其非线性作用区域就是O点的10距离以内附近,如果你的输入特征量级很大,导致计算得到的Z1(x)很大,对Z1进行激活处理时,可能就无法实现非线性激活作用,影响了激活函数初始化的应用效果。

数据预处理常用方法

最小最大归一化(MinMaxNormalization)

  • 最小最大归一化是数据预处理特征缩放常用的方法之一,它将特征数据通过线性变换压缩映射到一个特定范围内,常见的如 [0,1] 和 [-1,1] 。其公式如下:

$$
x^{‘} = \frac{(x-x_{min})}{x_{max}-x_{min}}
$$

  • 式中:$x_{max}$ 为特征变量的最大值,$x_{min}$ 为特征变量的最小值。

  • 最小最大归一化对异常值非常敏感,一个极端的异常值可能会显著影响数据的最小值和最大值,从而影响归一化结果,使大多数数据点集中在一个局部范围内,数据分布不均匀,进而导致模型学习困难,性能降低。所以其通常用在特征值数据范围固定或数据分布均匀的情况。

  • 由标准归一化公式可以推出区间范围换算公式如下:

$$
x^{“} = x_{‘} (x_{max}-x_{min}) + x_{min}
$$

  • 式中:$x_{‘}$ 为标准归一化公式,$x_{max}$ 为目标区间最大值,$x_{min}$ 为目标区间最小值。

Z-Score标准化

  • Z-Score标准化也是数据预处理特征缩放常用的方法之一,是一种将数据调整为均值为 0,标准差为 1 的特征缩放方法。它通过中心化和缩放,将原始数据映射到标准正态分布的范围内,从而统一数据的尺度。其公式如下:

$$
x^{‘} = \frac {x-\mu} {\sigma}
$$

  • 式中:μ为特征变量均值,σ为特征变量标准差。
  • Z-Score标准化使得数据中心化且尺度一致,适用于特征值符合正态分布的情况。