人工智能AI之机器学习基石系列 第 2 篇:数据为王——机器学习的燃料与预处理

news2025/7/18 8:26:50

专栏系列:《人工智能AI之机器学习基石》②


高质量的数据是驱动机器学习模型的强大燃料

🚀 引言:无米之炊与数据的重要性

在上一篇文章《什么是机器学习?——开启智能之门》中,我们一起揭开了机器学习的神秘面纱,了解了它的基本概念、与AI和深度学习的关系,以及机器学习的三大核心要素。我们知道了,机器学习就像一个聪明的学生,能够从经验中学习。

那么,这个经验具体是什么呢?答案就是——数据

俗话说,巧妇难为无米之炊。对于机器学习而言,数据就是那至关重要的。没有数据,再强大的算法也无法施展其能;数据的质量,则直接决定了模型学习的上限和最终的性能。正如汽车需要高质量的汽油才能跑得又快又远,机器学习模型也需要高质量的数据作为燃料

你可能会问:

  • 数据真的那么重要吗?难道不是算法更关键?
  • 我们从哪里获取数据?是不是所有数据都能直接用?
  • 在把数据给模型之前,我们通常需要对它做些什么手脚呢?

这篇文章,就让我们聚焦机器学习的生命之源”——数据,深入探讨数据在机器学习中的核心地位,以及在模型训练开始前,我们必须进行的那些关键的数据预处理工作。


💎 一、数据:机器学习的基石与天花板

在机器学习领域,流传着这样一句话:Garbage in, garbage out.(垃圾进,垃圾出)。这句话非常形象地说明了数据质量对于模型性能的决定性影响。

  • 数据决定了模型的上限: 即使拥有最顶尖的算法,如果输入的是充满噪声、错误、偏见或者与问题不相关的数据,那么训练出来的模型效果也必然大打折扣,甚至完全不可用。好的数据能够为模型提供丰富且准确的信息,让模型学习到真实世界中潜在的规律和模式。
  • 数据量与多样性同样重要:
    • 数据量: 通常情况下,越多的高质量数据,越能帮助模型学习到更普适、更鲁棒的规律,减少过拟合的风险。想象一下,只看几张猫的图片就想让机器认识所有品种的猫,显然是不现实的。
    • 多样性: 数据需要覆盖各种可能的情况和变化。例如,在训练人脸识别模型时,数据不仅要包含不同人的脸,还要包含不同光照、角度、表情、遮挡情况下的脸,这样模型才能在各种复杂场景下都表现良好。
  • 算法与数据相辅相成: 优秀的算法能够更有效地从数据中提取信息,但算法的威力最终还是受限于数据的质量和所包含信息的丰富程度。在很多实际项目中,工程师们花费在数据收集、清洗、整理和标注上的时间,往往远超选择和调试算法的时间。

一个简单的例子:

假设我们要训练一个模型来识别图片中的苹果。

  • 高质量数据: 我们提供了大量清晰的、各种品种、各种颜色、各种角度、不同背景下的苹果图片。模型就能很好地学习到苹果的通用特征。
  • 低质量数据:
    • 如果我们只提供了少量红富士苹果的图片,模型可能就无法识别青苹果或黄元帅。
    • 如果图片中混入了很多梨,或者苹果的标签被错误地标成了橘子,模型就会学到错误的信息。
    • 如果图片都非常模糊,模型也很难提取有效特征。

数据质量直接影响机器学习模型的学习效果

因此,在启动任何机器学习项目之前,首先要思考的问题就是:我们有什么样的数据?这些数据够不够好?我们如何才能获取到更好的数据?


🛠️ 二、数据预处理:让粗粮精粮

在现实世界中,我们收集到的原始数据往往是粗糙的,就像未经加工的粗粮,不能直接给机器学习模型。它们可能包含各种各样的问题:

  • 缺失值 (Missing Values) 数据中某些字段的值是空的。例如,在用户注册信息中,有些用户可能没有填写年龄。
  • 异常值/离群点 (Outliers) 数据中存在一些与其他数据点显著不同的极端值。例如,在记录用户年龄时,出现了“200这样的数据。
  • 数据格式不一致: 例如,日期格式有的是“2023-10-26”,有的是“10/26/2023”
  • 重复数据 (Duplicate Data) 数据集中存在完全相同或高度相似的记录。
  • 量纲差异巨大: 不同特征的数值范围可能相差悬殊。例如,房屋面积可能是几十到几百平方米,而卧室数量通常是个位数。
  • 非数值特征: 很多机器学习算法只能处理数值型数据,但原始数据中常常包含文本、类别等非数值特征。

为了解决这些问题,让数据变得更干净、更规整、更适合模型学习,我们就需要进行一系列的数据预处理 (Data Preprocessing) 操作。这就像把粗粮加工成精粮的过程。

常见的数据预处理步骤包括:

2.1 数据清洗 (Data Cleaning)

数据清洗的目的是处理数据中的部分,提高数据的准确性和一致性。

  • 处理缺失值:
    • 删除: 如果缺失值占比很小,或者某个样本/特征大部分都是缺失的,可以直接删除该样本或特征。
    • 填充/插补 (Imputation) 用某种策略填充缺失值,例如:
      • 用均值、中位数或众数填充。
      • 用模型预测(如K近邻、回归模型)来填充。
      • 对于时间序列数据,可以用前一个值或后一个值填充。
  • 处理异常值:
    • 识别: 可以通过统计方法(如原则、箱线图)、可视化或领域知识来识别异常值。
    • 处理:
      • 删除异常值。
      • 将异常值视为缺失值进行处理。
      • 对异常值进行修正或替换(例如,用盖帽法将其限制在一定范围内)。
  • 处理重复数据: 识别并删除重复的记录。
  • 数据格式转换与一致化: 将不同格式的数据统一起来。

数据清洗:去除数据中的杂质

2.2 特征转换 (Feature Transformation) / 特征编码 (Feature Encoding)

很多机器学习模型,特别是基于数学公式的模型(如线性回归、逻辑回归、支持向量机、神经网络等),通常要求输入是数值型的。因此,我们需要将非数值型的特征转换为数值型表示。

  • 处理类别特征 (Categorical Features)
    • 标签编码 (Label Encoding) 将类别标签直接映射为整数(例如,”->0绿”->1”->2)。适用于有序类别特征,但对于无序类别特征,可能会引入不期望的顺序关系。
    • 独热编码 (One-Hot Encoding) 为每个类别创建一个新的二元特征(01)。例如,颜色特征有红、绿、蓝三个取值,独热编码后会变成三个新特征:是否为红色是否为绿色是否为蓝色。这种方法避免了顺序问题,但如果类别过多,会导致特征维度急剧增加(维度灾难)。 

                              独热编码将类别特征转换为数值型

    • 其他编码方式: 如哑变量编码 (Dummy Encoding,类似独热,但会移除一个类别以避免多重共线性)、目标编码 (Target Encoding)、频率编码等。
  • 处理文本特征:
    • 词袋模型 (Bag-of-Words, BoW) 将文本表示为一个词频向量。
    • TF-IDF (Term Frequency-Inverse Document Frequency) 衡量一个词对于一篇文档的重要性。
    • 词嵌入 (Word Embeddings) Word2Vec, GloVe, FastText,将词语映射到低维稠密向量空间,捕捉词语间的语义关系。这是现代自然语言处理中非常重要的方法。
  • 处理日期和时间特征: 可以从中提取年、月、日、星期几、小时等作为新的数值特征。

2.3 特征缩放 (Feature Scaling)

当不同特征的数值范围(量纲)差异很大时,某些机器学习算法(如梯度下降法、K近邻、支持向量机等)可能会受到影响,使得数值范围大的特征在模型中占据主导地位,而数值范围小的特征被忽略。特征缩放可以将所有特征的值调整到相似的范围。

  • 归一化 (Normalization / Min-Max Scaling) 将特征值缩放到一个固定的区间,通常是 [0, 1] [-1, 1]
    公式:X_scaled = (X - X_min) / (X_max - X_min)
  • 标准化 (Standardization / Z-score Scaling) 将特征值转换为均值为0,标准差为1的分布。处理后的数据没有固定的范围,但对异常值不那么敏感。
    公式:X_scaled = (X - μ) / σ (其中 μ 是均值,σ 是标准差)

特征缩放可以消除不同特征量纲带来的影响

何时选择归一化或标准化?

  • 如果算法对数据的分布有假设(如高斯分布),或者数据中异常值较多,标准化通常是更好的选择。
  • 如果希望将数据严格限制在某个范围内(例如,在图像处理中像素值通常在0-2550-1),或者算法对输入范围敏感(如某些神经网络激活函数),归一化可能更合适。
  • 对于不依赖距离计算或梯度下降的算法(如决策树、随机森林),特征缩放通常不是必需的。

2.4 数据集划分 (Dataset Splitting)

在训练模型之前,我们通常需要将整个数据集划分为几个部分,以评估模型的性能并防止过拟合。

  • 训练集 (Training Set) 用于训练模型,让模型学习数据中的规律。这是模型唯一能看到并从中学习的数据。
  • 验证集 (Validation Set) 用于在训练过程中调整模型的超参数(例如,学习率、网络层数、正则化系数等),并对模型的性能进行初步评估。模型不会直接从验证集中学习参数,但验证集的表现会指导我们如何调整模型结构和训练过程。
  • 测试集 (Test Set) 在模型训练和超参数调整都完成后,用于最终评估模型在未见过的新数据上的泛化能力。测试集的结果是衡量模型好坏的最终成绩单,它应该在整个训练和调优过程中保持盲盒状态,直到最后才使用。

常见的划分比例可能是 70% 训练集,15% 验证集,15% 测试集;或者 80% 训练集,20% 测试集(如果不需要显式的验证集,或者使用交叉验证)。

将数据集划分为训练集、验证集和测试集

交叉验证 (Cross-Validation) 当数据量较少时,为了更可靠地评估模型性能并充分利用数据,可以使用交叉验证。最常见的是K折交叉验证:将训练集分成K个互不相交的子集,每次用K-1个子集作为训练数据,剩下的1个子集作为验证数据,重复K次,最后取K次评估结果的平均值。


🌟 三、特征工程:点石成金的艺术

除了上述基础的数据预处理步骤,还有一个更具创造性和经验性的环节,对模型性能的提升往往起到至关重要的作用,那就是特征工程 (Feature Engineering)

特征工程是指利用领域知识和数据分析技能,从原始数据中提取、构建或组合出对机器学习模型更有用、更能表达问题本质的新特征的过程。 好的特征工程能够:

  • 提升模型性能: 让模型更容易学习到数据中的规律。
  • 简化模型: 用更少的、但更有效的特征达到同样甚至更好的效果。
  • 增强模型的可解释性: 有意义的特征更容易理解模型的决策过程。

特征工程的一些常见方法:

  • 特征构建 (Feature Construction)
    • 从现有特征组合出新特征。例如,从长度宽度构建出面积特征。
    • 从日期时间特征中提取是否为周末是否为节假日等。
    • 对数值特征进行分箱(Binning),将其转换为类别特征。例如,将年龄分为青年中年老年
  • 特征选择 (Feature Selection)
    • 从众多特征中挑选出对模型预测最有帮助的子集,去除冗余或不相关的特征,以降低模型复杂度、减少过拟合、提高训练效率。
    • 方法包括:过滤法(Filter methods,如卡方检验、互信息)、包裹法(Wrapper methods,如递归特征消除)、嵌入法(Embedded methods,如L1正则化)。
  • 特征提取 (Feature Extraction)
    • 通过某种变换将高维特征数据映射到低维空间,同时保留主要信息。
    • 例如:主成分分析 (Principal Component Analysis, PCA)、线性判别分析 (Linear Discriminant Analysis, LDA)

特征工程往往需要对业务问题和数据有深入的理解,是一个不断尝试和迭代的过程,有时甚至被认为是机器学习中的艺术


💡 小结:数据准备是成功的一半

通过本篇文章,我们了解到:

  1. 数据是机器学习的基石,其质量和数量直接决定了模型的上限。
  2. 原始数据往往是的,需要进行一系列数据预处理操作,包括数据清洗、特征转换/编码、特征缩放和数据集划分。
  3. 特征工程是提升模型性能的关键步骤,它依赖于领域知识和创造性思维。

可以说,在整个机器学习项目中,数据准备工作(包括数据收集、预处理和特征工程)占据了绝大部分的时间和精力,但这也是最能体现内功和产生价值的地方。一个精心准备的数据集,往往比一个复杂高深的算法更能带来性能上的突破。

“Garbage in, garbage out.” 这句话时刻提醒我们,在踏上模型训练的征途之前,务必先打磨好我们手中的利器”——数据。


🔭 下一篇预告:选择你的学习方法”——初探监督学习与无监督学习

我们已经了解了机器学习是什么,以及数据的重要性。那么,机器具体是如何从数据中学习的呢?不同的学习任务需要不同的学习方法。下一篇文章,我们将开始探索机器学习的几种主要学习范式:

  • 什么是监督学习 (Supervised Learning)?它如何解决分类和回归问题?
  • 什么是无监督学习 (Unsupervised Learning)?它如何帮助我们发现数据中的隐藏结构,比如聚类和降维?
  • 它们之间有什么区别和联系?各自适用于哪些场景?

敬请期待《人工智能AI之机器学习基石》系列的下一篇内容!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2387732.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营 Day58 图论Ⅷ 拓扑排序 Dijkstra

图论 题目 117. 软件构建 拓扑排序:给出一个有向图,把这个有向图转成线性的排序就叫拓扑排序。 当然拓扑排序也要检测这个有向图是否有环,即存在循环依赖的情况,因为这种情况是不能做线性排序的。所以拓扑排序也是图论中判断有向…

实现单例模式的6种方法(Python)

目录 一. 基于模块的实现(简单,易用) 二. 重新创建时报错(不好用) 三. 只靠方法获取实例(不好用) 四. 类装饰器 五. 重写__new__方法 六. 元类 七. 总结 单例模式(Singleton Pattern)是一种设计模式,其核心目标是确保一个类…

深度学习优化器相关问题

问题汇总 各类优化器SGDMomentumNesterovAdagardAdadeltaRMSpropAdam优化器 为什么Adam不一定最优而SGD最优的深度网络中loss除以10和学习率除以10等价吗L1,L2正则化是如何让模型变得稀疏的,正则化的原理L1不可导的时候该怎么办梯度消失和梯度爆炸什么原因&#xff…

【免费】【无需登录/关注】度分秒转换在线工具

UVE Toolbox 功能概述 这是一个用于地理坐标转换的在线工具,支持两种转换模式: 十进制度 → 度分秒 度分秒 → 十进制度 使用方法 十进制度转度分秒 在"经度"输入框中输入十进制度格式的经度值(例如:121.46694&am…

常见的垃圾回收算法原理及其模拟实现

1.标记 - 清除(Mark - Sweep)算法: 这是一种基础的垃圾回收算法。首先标记所有可达的对象,然后清除未被标记的对象。 缺点是会产生内存碎片。 原理: 如下图分配一段内存,假设已经存储上数据了 标记所有…

力扣面试150题--完全二叉树的节点个数

Day 51 题目描述 思路 根据完全二叉树的规律,完全二叉树的高度可以直接通过不断地访问左子树就可以获取,判断左右子树的高度: 1. 如果相等说明左子树是满二叉树, 然后进一步判断右子树的节点数(最后一层最后出现的节点必然在右子树中) 2. 如…

BLIP3-o:一系列完全开源的统一多模态模型——架构、训练与数据集

摘要 在近期关于多模态模型的研究中,将图像理解与生成统一起来受到了越来越多的关注。尽管图像理解的设计选择已经得到了广泛研究,但对于具有图像生成功能的统一框架而言,其最优模型架构和训练方案仍有待进一步探索。鉴于自回归和扩散模型在…

DNS解析流程入门篇

一、DNS 解析流程 1.1 浏览器输入域名 当在浏览器中输入 www.baidu.com 时,操作系统会按照以下步骤进行 DNS 解析: 检查本地 hosts 文件 :操作系统先检查本地的 /etc/hosts 文件,查看是否存在域名与 IP 地址的对应关系。如果找到…

大模型系列22-MCP

大模型系列22-MCP 玩转 MCP 协议:用 Cline DeepSeek 接入天气服务什么是 MCP?环境准备:VScode Cline DeepSeek**配置 DeepSeek 模型:****配置 MCP 工具****uvx是什么?****安装 uv(会自动有 uvx 命令&…

【监控】Prometheus+Grafana 构建可视化监控

在云原生和微服务架构盛行的今天,监控系统已成为保障业务稳定性的核心基础设施。作为监控领域的标杆工具,Prometheus和Grafana凭借其高效的数据采集、灵活的可视化能力,成为运维和开发团队的“标配”。 一、Prometheus Prometheus诞生于2012…

RAGFlow源码安装操作过程

RAGFlow是一款基于深度文档理解构建的开源 RAG&#xff08;Retrieval-Augmented Generation&#xff09;引擎&#xff0c;可作为Dify的外部知识库使用[1]。本文主要介绍RAGFlow前端和后端等源码安装操作过程。 一.后端安装 特别注意&#xff1a;python ">3.12,<3…

Unity使用XCharts动态配置数据——折线图(LineChart)

XCharts官网地址&#xff1a;https://xcharts-team.github.io/ 本地上传资源&#xff1a;https://download.csdn.net/download/m0_64375864/90919669 效果图&#xff1a; 动态配置数据&#xff1a; public class Test3 : MonoBehaviour {public LineChart lineChart;public …

【HITCSAPP 哈工大计算机系统期末大作业】 程序人生-Hello’s P2P

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算机与电子通信类 学   号 2023112915 班   级 23L0505 学 生 杨昕彦 指 导 教 师 刘宏伟 计算机科学…

DAY9 热力图和箱线图的绘制

浙大疏锦行 学会了绘制两个图&#xff1a; 热力图&#xff1a;表示每个特征之间的影响&#xff0c;颜色越深数值越大表示这两个特征的关系越紧密 箱线图&#xff1a;表示每个特征的数据分布情况 箱体&#xff08;Box&#xff09;&#xff1a; 箱体的上下边界分别表示第一四分位…

解释一下NGINX的反向代理和正向代理的区别?

大家好&#xff0c;我是锋哥。今天分享关于【解释一下NGINX的反向代理和正向代理的区别?】面试题。希望对大家有帮助&#xff1b; 解释一下NGINX的反向代理和正向代理的区别? NGINX的反向代理和正向代理的区别主要体现在它们的功能和使用场景上。下面我会详细解释它们的定义…

数学笔记一:标量、向量和矩阵基本概念辨析

一、标量 标量&#xff08;Scalar&#xff09; 是一种仅用数值大小&#xff08;即 “量值”&#xff09;就能完全描述的物理量或数学对象&#xff0c;它不具有方向属性。 例如在实数领域的正数、负数。 在物理学领域的多少斤、多少公斤、水温多少度、气温多少度都是标量。 …

vue3获取两个日期之间的所有时间

1.获取两个日期之间所有年月日 如图所示&#xff1a; 代码如下&#xff1a; <template><div class"datePicker"><el-date-pickerv-model"value1"type"daterange"range-separator"至"start-placeholder"开始时间…

Python 实现简易版的文件管理(结合网络编程)

目录 一、Python 代码实现1. 服务器端2. 客户端 二、结果展示1. 查看当前路径下的内容 ls2. 切换当前路径 cd3. 查看当前路径 pwd4. 显示根目录下的树状结构 tree5. 在当前路径下创建目录 mkdir6. 删除当前路径下的文件或目录 rm7. 复制文件 mv8. 移动文件 cp9. 用户从当前路径…

PXC集群

PXC集群 一、环境介绍二、PXC安装1、关闭默认mysql模块2、安装yum源3、准备pxc安装环境4、安装pxc5、启动mysql&#xff0c;并更改root密码 三、搭建PXC集群1、编辑/etc/my.cnf 配置文件&#xff08;1&#xff09;pxc1节点配置文件&#xff08;2&#xff09;pxc2节点配置文件&a…

线程安全问题的成因

前言 大家晚上好呀~~ 今天学习了线程不安全问题的成因。线程安全问题是十分重要的知识点&#xff0c;我想把我所学的与大家分享一波&#xff0c;希望可以帮助到有需要的人&#xff0c;同时加深自己对于线程安全问题的理解。 分析过程如下 结语 今天心情还不错~ 要坚持持续…