网站设置5个关键词,微商城 网站制作,iis 网站显示建设中,搜外seo数据预处理之数据归一化 一、摘要二、数据归一化概念三、数据归一化实现方法3.1 最值归一化方法3.2 均值方差归一化方法 一、摘要
本文主要讲述了数据归一化#xff08;Feature Scaling#xff09;的重要性及其方法。首先通过肿瘤大小和发现时间的例子#xff0c;说明了不同… 数据预处理之数据归一化 一、摘要二、数据归一化概念三、数据归一化实现方法3.1 最值归一化方法3.2 均值方差归一化方法 一、摘要
本文主要讲述了数据归一化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,size100)
# 根据最值归一化公式实现Int类型数据的归一化
# 实现最值归一化公式返回结果是一个向量,其中每一个元素的值就处于[0,1]之间
(x - np.min(x)) / (np.max(x) - np.min(x))在jupyter中执行结果 浮点型矩阵数据的归一化代码 # 生成50x2的矩阵其中数值都在0-100之间
X np.random.randint(0,100,(50,2))
# 将整型的矩阵转成浮点型矩阵
X np.array(X,dtypefloat)
# 将X矩阵数据进行最值归一化由于矩阵的列数是2列因此分别需要对矩阵的每一列进行最值归一化处理如有多列则使用循环即可
for col in range(0,2):# 对X中每列进行最值归一化X[:,col] (X[:,col] - np.min(X[:,col])) / (np.max(X[:,col]) - np.min(X[:,col]))
# 可以将X矩阵归一化之后的数据绘制出来验证其中每列数值是否处于[0,1]之间
import matplotlib.pyplot as plt
plt.scatter(X[:,0],X[:,1])
plt.show()执行结果 此时可以看出图中横纵坐标的数值处于[0,1]之间说明X矩阵的数据已经完成了最值归一化。 查看X矩阵中的均值和方差 # 查看X矩阵方差
[(np.std(X[:,col])) for col in range(0,2)]
# 查看X矩阵方差
[(np.std(X[:,col])) for col in range(0,2)]执行结果
3.2 均值方差归一化方法 均值方差归一化将数据转换为均值为0方差为1的分布。 方法用每个特征减去均值再除以方差。 S为方差Xmean为均值。 适用于数据分布没有明确边界的情况如收入分布。 优点不受异常值影响使数据分布更加合理。 代码实现过 实现步骤及效果 生成随机矩阵并进行均值方差归一化。步骤求均值和方差减去均值再除以方差。结果矩阵中的元素不保证在0到1之间但均值为0方差为1。 编写代码 X np.random.randint(0,100,(50,2))
X np.array(X,dtypefloat)
# 根据均值方差归一化公式实现X矩阵的均值方差归一化实现代码
for col in range(0,2):X[:,col] (X[:,col] - np.mean(X[:,col])) / np.std(X[:,col])
# 绘制图像查看效果
plt.scatter(X[:,0],X[:,1])
plt.show()执行效果 查看X矩阵中的均值和方差是否接近或等于0和1 查看X矩阵的每列数据的均值是否接近或等于0 # 通过图像查看并不是很直观因此我们查看X矩阵的每列数据的均值是否接近或等于0
[(np.mean(X[:,col])) for col in range(0,2)]执行结果 浮点数精度限制计算机在存储和处理浮点数时存在精度限制。不同编程语言和系统对于浮点数的表示遵循 IEEE 754 标准常见的单精度浮点数float通常有大约 7 位十进制有效数字双精度浮点数double大约有 15 - 16 位十进制有效数字。当一个数的绝对值小于计算机所能表示的最小非零浮点数时就可能会出现下溢情况计算机可能会将其当作 0 处理。不过 -1.3322676295501878e - 17 一般不会出现这种情况大多数计算机环境能正常表示它。 实际应用场景的误差容忍度在许多实际的计算和应用中我们会设定一个误差范围也称为容差。如果一个数的绝对值小于这个容差就可以将其当作 0 处理。例如在数值计算、物理模拟等领域为了简化计算或者忽略极小的误差常常会这么做。以下是 Python 示例代码演示了如何根据容差判断一个数是否近似为 0 num -1.3322676295501878e-17
tolerance 1e-15
if abs(num) tolerance:print(在给定容差范围内该数近似为 0)
else:print(该数不等于 0)查看X矩阵的每列数据的方差是否接近或等于1 # 通过图像查看并不是很直观因此我们查看X矩阵的每列数据的方差是否接近或等于1
[(np.std(X[:,col])) for col in range(0,2)]执行结果