首先,我们要知道在机器学习某些算法中,是不需要数据归一化的,比如树型model;而当数据的多个特征属性,其量纲不一,但是其需要使用GD迭代更新构建模型,此时加入归一化就可以一定程度上增加模型学习能力。
归一化的好处:
- 一定程度提高模型精度
在机器学习或者深度学习中,大多模型的loss计算,需要假定数据的所有特征都是零均值并且具有同一阶方差的。这样在计算loss时,才能将所有特征属性统一处理。
比如,在KNN中,我们需要计算样本之间的欧式距离,如果样本两个属性的量纲差距过大,则大量纲的属性在距离计算中就占据了主导地位。而现实中,可能恰恰相反。所以,加入归一化,将数据的特征属性scale到统一量纲,可以一定程度解决这个问题。 - 提升收敛速度
对于使用梯度下降优化的模型,每次迭代会找到梯度最大的方向迭代更新模型参数。但是,如果模型的特征属性量纲不一,那么我们寻求最优解的特征空间,就可以看做是一个椭圆形的,其中大量冈的属性对应的参数有较长的轴。在更新过程中,可能会出现更新过程不是一直朝向极小点更新的,而是呈现‘Z’字型。使用了归一化对齐量纲之后,更新过程就变成了在近似圆形空间,不断向圆心(极值点)迭代的过程:
文章图片
文章图片
而且,树模型的构建是一个不断寻找最佳分裂点的过程,而不像LR、NN等,使用梯度下降不断迭代更新生成的。
归一化方法 标准化
对数据的特征属性减去均值,除以方差。转化为均值为0,方差为1的标准正态分布。 x = ( x ? μ ) / σ x=(x-\mu) / \sigma x=(x?μ)/σ.
一般,我们会记录训练集上的均值和方差,对训练集进行标准化之后,在后续测试使用模型时,对测试数据使用训练集上的方差和均值标准化测试集。
这种方法对离群噪声点的鲁棒性较高。但是,离群点也会参与方差和均值的计算,如果离群点太多,还是会影响性能。
max-min归一化
通过 x = ( x ? min ? ) / ( max ? ? min ? ) x=(x-\min ) /(\max -\min ) x=(x?min)/(max?min)将数据线性缩放到【0,1】之间,缺点是,有新点加入时,可能影响min、max,进而改变归一化结果。所以,其对噪声点很敏感。
优点就是,这种方法可以保留稀疏特征中的0, 并且可以解决到特征的方差很小的情况时的数据。
还一个类似的方法,就是Maxabsscale, 每个特征除以该特征的绝对值最大的特征值,将特征缩放到【-1, 1】之间。图像处理中,经常一个操作就是将int型图片矩阵,除以255转化为double型图片矩阵参考 【深度学习|深度学习每日一问(为什么要对数据归一化(数据预处理))】机器学习数据预处理——标准化/归一化方法
推荐阅读
- 深度学习相关|深度学习常用的训练数据集介绍以及下载
- pytorch|PyTorch 被大量网友反馈,TorchRec 这一新库“诞生”且规模宏大
- 论文|Vision Transformer(学习博客总结)
- #|动手学深度学习(第五章 卷积神经网络)
- 机器学习|transformer学习总结
- python|Yolo4-Tiny代码解读
- FPGA|基于FPGA的MobileNet V2卷积神经网络加速器
- 人工智能算法|基于yolov4-tiny-pytorch轻量级框架的目标检测
- 动手学深度学习(pytorch|动手学深度学习(四十一)——深度循环神经网络(Deep-RNN))