机器学习中使用的数据为啥要归一化?
不同评价指标之间会使用不同的量纲。
比如,评价房价的量纲一般有面积、楼层等;预测患病率来的量纲有:身高、体重、家族遗传病史等;
以房价来说,北京和十八线小县城的房价虽然都有面积楼层等,但肯定没法直接比较,因为北京的每平米基本5位数起步,但十八线小县城大概率只有4位数;
落差较大势必会影响数据分析的结论,一堆十八线城市的数据中混入一个北京市的数据会对结论产生很大影响。
为了消除指标之间量纲的影响,需要进行数据标准化处理,以解决数据指标之间的可比性;原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。
先来看一张数据分析图:
从左至右来看:
- 第1个模型是一个线性模型,拟合度很低,也称作 欠拟合;
- 第3个模型是一个高次方的模型,虽然很好的适应了我们的训练数据集,但对新输入变量进行预测的时候,效果可能会很差,也称作 过度拟合;
- 第2个模型则是刚刚适合我们数据的模型。
如果发现过度拟合的情况,该如何处理呢?
- 1、人工筛选:
丢弃一些不能帮助我们正确预测的特征; - 2、归一化处理:
保留所有特征,减少参数间的大小或重要性落差,以使得不同维度之间的特征在数值上有一定可比性;
当然还可以使用某类算法对数据预处理,本文不做详细讨论。
两种常用的归一化方法:
1、min-max标准化(Min-Max Normalization)也称 线性函数归一化
定义: 也称为离差标准化,是对原始数据的线性变换,使得结果映射到0-1之间。
本质: 把数变为【0,1】之间的小数。
转换函数:(x-min/(max-min)
如果想要将数据映射到-1,1,则将公式换成: (X-Mean) / (Max-Min)
其中: max为样本数据的最大值,min为样本数据的最小值,Mean表示数据的均值。
缺陷: 当有新数据加入时,可导致max和min的变化,需要重新定义。
2、0均值标准化(Z-score standardization)
定义: 这种方法给与原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1;
本质: 把有量纲表达式变成无量纲表达式。
转换函数: (X-Mean)/(Standard-Deviation)
其中,Mean为所有样本数据的均值。Standard Deviation为所有样本数据的标准差。
两种归一化方法的使用场景:
方法【1】的典型应用:图像处理;
在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法;
比如图像处理中,将RGB图像转换为灰度图像后将其值限定在(0 ,255)的范围,通常有最大值法、最小值法、均值法等;
其归一化原理就是分别将RGB三种颜色中的最大值、最小值、平均值等重新赋值给当前像素点;可参考图像二值化的原理来简单理解。
图像二值化时的阈值选取方法常见由如下几种:
- 双峰法。
- P参数法。
- 最大类间方差法(Otsu、大津法)。
- 最大熵阈值法。
- 迭代法(最佳阈值法)。
这里选取第一种双峰法简单介绍一下(其实吧村长也只懂最简单的ε=(´ο`*)))誒),参见下图:
可选取 Zt 谷底处的值作为二值化的阈值,大于此阈值,全部改为 255;小于等于就全改为 0。
这里只需知晓原理即可,很多编程语言,如 Python 中,已有现成的图像二值化类库,可选择任意一种方法进行二值化。
注:该方法不适用于单峰图、双峰落差很大、谷底较长(比如与峰值长度相当)且平坦的情况,最好是个凹字形。
方法【2】的典型应用:分类、聚类算法;
在分类、聚类算法中,当需要使用距离来度量相似性的时候,第二种方法(Z-score standardization)表现更好。
因为第一种方法(线性变换后),其协方差产生了倍数值的缩放,因此这种方式无法消除量纲对方差、协方差的影响;
同时,由于量纲的存在,使用不同的量纲、距离的计算结果会不同。
而第二种归一化方式中,新的数据由于对方差进行了归一化,这时候每个维度的量纲其实已经等价了,每个维度都服从均值为0、方差1的正态分布;
在计算距离的时候,每个维度都是去量纲化的,避免了不同量纲的选取对距离计算产生的巨大影响。