数据预处理之数据归一化
一、摘要
本文主要讲述了数据归一化(Feature Scaling)的重要性及其方法。首先通过肿瘤大小和发现时间的例子,说明了不同量纲特征在距离计算中可能导致偏差,从而引出数据归一化的必要性。接着,介绍了最值归一化(Normalization)的概念和方法,即将数据映射到0-1之间的尺度,并指出其适用于分布有明显边界的情况。最后,还指出了最值归一化的一个缺点,即受异常值影响较大。
二、数据归一化概念
- 归一化是指一种简化计算的方式,将数据经过处理之后限定到一定的范围之内,一般都会将数据限定在[0,1]。数据归一化可以加快算法的收敛速度,而且在后续的数据处理上也会比较方便。
- 数据归一化的重要性:
- 数据归一化是机器学习中非常重要的一步,也称为特征缩放。
- 归一化的目的是使数据在不同特征之间具有相同的尺度,以便更好地进行分类或其他机器学习任务。
- 另外,归一化算法是一种
去量纲
的行为,关于量纲对于计算的影响可以举这样一个例子:使用肿瘤大小(厘米)和发现时间(天)作为特征进行分类。
未归一化时,距离计算主要受发现时间影响,因为时间单位的差异导致数据尺度不同。通过调整时间单位为年,可以使得距离计算更准确地反映肿瘤大小的重要性。归一化的作用就是去除这样的量纲给计算带来的影响。
三、数据归一化实现方法
3.1 最值归一化方法
- 最值归一化将数据映射到0到1之间。
- 方法:对每个特征求最大值和最小值,然后使用公式(x - xmin) / (xmax - xmin)进行转换。
- 适用于数据分布有明确边界的情况,如
考试成绩
或像素值
。 - 缺点:对异常值敏感,可能影响归一化结果。
- 注意事项:
在执行归一化的算法时有一个地方需要注意,因为公式 y=(x-MinValue)/(MaxValueMinValue)的分母是 MaxValue-MinValue,如果某一个字段的最大值和最小值是相同的,会出现分母为零
的情况。所以对于字段数据全部相同的情况要加以判断,通常来讲如果当前字段全部相等且为非零数值,就转换为 1 来处理。如果当前字段全部数值都是 0,那就直接保留 0。 - 最值归一化的实现
-
整型向量数据的归一化代码
import numpy as np # 随机生成向量,其中每个向量的数值是0-100,生成100个 x = np.random.randint(0,100,size=100) # 根据最值归一化公式,实现Int类型数据的归一化 # 实现最值归一化公式,返回结果是一个向量,其中每一个元素的值就处于[0,1]之间 (x - np.min(x)) / (np.max(x) - np.min(x))
在jupyter中执行结果:
-
浮点型矩阵数据的归一化代码
# 生成50x2的矩阵,其中数值都在0-100之间 X
-