【机器学习】数据预处理之数据归一化

数据预处理之数据归一化

一、摘要

本文主要讲述了数据归一化(Feature Scaling)的重要性及其方法。首先通过肿瘤大小和发现时间的例子,说明了不同量纲特征在距离计算中可能导致偏差,从而引出数据归一化的必要性。接着,介绍了最值归一化(Normalization)的概念和方法,即将数据映射到0-1之间的尺度,并指出其适用于分布有明显边界的情况。最后,还指出了最值归一化的一个缺点,即受异常值影响较大。

二、数据归一化概念

  1. 归一化是指一种简化计算的方式,将数据经过处理之后限定到一定的范围之内,一般都会将数据限定在0,1。数据归一化可以加快算法的收敛速度,而且在后续的数据处理上也会比较方便。
  2. 数据归一化的重要性
    1. 数据归一化是机器学习中非常重要的一步,也称为特征缩放
    2. 归一化的目的是使数据在不同特征之间具有相同的尺度,以便更好地进行分类或其他机器学习任务。
  3. 另外,归一化算法 是一种去量纲的行为,关于量纲对于计算的影响可以举这样一个例子:使用肿瘤大小(厘米)和发现时间(天)作为特征进行分类。

    未归一化时 ,距离计算主要受发现时间影响,因为时间单位的差异导致数据尺度不同。通过调整时间单位为年,可以使得距离计算更准确地反映肿瘤大小的重要性。归一化的作用就是去除这样的量纲给计算带来的影响。

三、数据归一化实现方法

3.1 最值归一化方法

  1. 最值归一化将数据映射到0到1之间。
  2. 方法:对每个特征求最大值和最小值,然后使用公式(x - xmin) / (xmax - xmin)进行转换。
  3. 适用于数据分布有明确边界 的情况,如考试成绩像素值
  4. 缺点:对异常值敏感,可能影响归一化结果。
  5. 注意事项
    在执行归一化的算法时有一个地方需要注意,因为公式 y=(x-MinValue)/(MaxValueMinValue)的分母是 MaxValue-MinValue,如果某一个字段的最大值和最小值是相同的,会出现分母为零的情况。所以对于字段数据全部相同的情况要加以判断,通常来讲如果当前字段全部相等且为非零数值,就转换为 1 来处理。如果当前字段全部数值都是 0,那就直接保留 0。
  6. 最值归一化的实现
    • 整型向量数据的归一化代码

      python 复制代码
      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中执行结果:

    • 浮点型矩阵数据的归一化代码

      python 复制代码
      # 生成50x2的矩阵,其中数值都在0-100之间
      X = np.random.randint(0,100,(50,2))
      # 将整型的矩阵转成浮点型矩阵
      X = np.array(X,dtype=float)
      # 将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矩阵中的均值和方差

      python 复制代码
      # 查看X矩阵方差
      [(np.std(X[:,col])) for col in range(0,2)]
      # 查看X矩阵方差
      [(np.std(X[:,col])) for col in range(0,2)]

      执行结果:

3.2 均值方差归一化方法

  1. 均值方差归一化将数据转换为均值为0,方差为1的分布。

  2. 方法 :用每个特征减去均值,再除以方差。

    S为方差,Xmean为均值。

  3. 适用于数据分布没有明确边界的情况,如收入分布。

  4. 优点:不受异常值影响,使数据分布更加合理。

  5. 代码实现过

    • 实现步骤及效果:

      • 生成随机矩阵并进行均值方差归一化。
      • 步骤:求均值和方差,减去均值,再除以方差。
      • 结果矩阵中的元素不保证在0到1之间,但均值为0,方差为1。
    • 编写代码

      python 复制代码
      X = np.random.randint(0,100,(50,2))
      X = np.array(X,dtype=float)
      # 根据均值方差归一化公式,实现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

        python 复制代码
        # 通过图像查看并不是很直观,因此,我们查看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:

        python 复制代码
        num = -1.3322676295501878e-17
        tolerance = 1e-15
        if abs(num) < tolerance:
            print("在给定容差范围内,该数近似为 0")
        else:
            print("该数不等于 0")
      • 查看X矩阵的每列数据的方差是否接近或等于1

        python 复制代码
        # 通过图像查看并不是很直观,因此,我们查看X矩阵的每列数据的方差是否接近或等于1
        [(np.std(X[:,col])) for col in range(0,2)]

        执行结果:

相关推荐
Elastic 中国社区官方博客1 分钟前
Hacknight Beijing:基于阿里云与 Elastic 构建 AI Agents
大数据·运维·人工智能·elasticsearch·搜索引擎·阿里云·云计算
柏舟飞流3 分钟前
大数据与 AI 融合:高阶架构与实践
大数据·人工智能·架构
Database_Cool_6 分钟前
数据仓库弹性扩缩容怎么实现?阿里云 AnalyticDB MySQL Serverless 弹性架构详解
数据库·人工智能·阿里云
羑悻的小杀马特6 分钟前
从 Claude Code 到 QClaw:AgentSkills 规范的跨生态实践与工程取舍!
人工智能·自动化·agent·skills·openclaw·qclaw
zhangfeng11336 分钟前
超算中心 高性能计算 htc命令module use的作用
人工智能·机器学习
Rocky Ding*7 分钟前
深入浅出完整解析AIGC时代中GAN(Generative Adversarial Network)系列模型核心基础知识(下篇)
论文阅读·人工智能·深度学习·机器学习·aigc·gan·ai-native
软件开发技术深度爱好者9 分钟前
当前的AI或者说大语言模型与《中庸》思想关联意义的探讨
人工智能·学习心得
装不满的克莱因瓶10 分钟前
什么是特征分解?从数学定义到现实问题的映射
人工智能·数学·算法·机器学习·ai·特征分解
Dylan的码园12 分钟前
告别AI空交互!ToDesk AI实测:能自主操控电脑的落地式AI生产力助手
人工智能·电脑
呆呆敲代码的小Y12 分钟前
【最新Codex教程】 | 安装、入门和快速使用,适合新手
人工智能·gpt·ai·llm·openai·agent·codex