5698 字
28 分钟
机器学习

概述#

这一讲讨论的是 机器学习(Machine Learning)。它回答的核心问题是:

当我们很难把规则一条条写给机器时,能否让机器直接从数据中学出规律?

这一讲的逻辑主线:

  • 先对比 基于知识的人工智能基于学习的人工智能,说明为什么机器学习会成为主流;
  • 再给出机器学习的基本定义:它本质上是 从数据到模型、从样本到规律 的过程;
  • 然后进入机器学习前非常关键、但在很多课程里容易被忽略的一环:特征工程(feature engineering)
  • 接着分别讲三大类方法:
    • 监督学习(supervised learning)
    • 无监督学习(unsupervised learning)
    • 强化学习(reinforcement learning)
  • 最后把它们放回实际应用里去理解:推荐系统、分类、聚类、博弈、机器人控制、自动驾驶等。

机器学习 = 用数据构造特征,用特征训练模型,用模型完成预测、分类、聚类或决策。


目录#


为什么需要机器学习#

基于知识的人工智能#

早期人工智能的一个重要思路是:

  • 先由人类专家总结知识;
  • 再把这些知识写成规则;
  • 最后让机器按照规则进行推理。

最典型的规则形式就是:

  • 如果……那么……(if…then…)

例如:

  • 如果天气阴且湿度大,那么会下雨;
  • 如果下雨,那么河水可能暴涨;
  • 如果河水暴涨,那么房屋可能被淹。

把这些规则串起来,机器就能形成一条推理链。

这类方法在一些任务上非常有效,例如:

  • 定理证明;
  • 专家系统;
  • 某些规则清晰、领域封闭的问题。

基于知识方法的局限#

它的问题也很明显:

  1. 知识难以穷尽

    • 现实世界的规则太多,人很难全部手工写出来。
  2. 知识获取成本高

    • 需要专家长期整理、编码、维护。
  3. 泛化能力有限

    • 一旦遇到规则库之外的新情况,系统就容易失效。
  4. 面对不确定性不够灵活

    • 现实世界里很多问题并没有那么“干净”的逻辑条件。

所以,人工智能逐渐从“把规则灌给机器”转向“让机器自己从数据里学规律”。

基于学习的人工智能#

机器学习的代表性起点通常追溯到 Arthur Samuel 在 1959 年提出的定义:

让机器具有一种不需要明确编程也能学习的能力。

直观理解就是:

  • 不是人把所有规则都提前写好;
  • 而是给机器数据、反馈和目标;
  • 机器自己去调整内部参数,逐渐学会任务。

Samuel 在跳棋程序中的实验很经典:

  • 只告诉机器游戏规则、一些大致思路和参数;
  • 然后让机器不断调整;
  • 最终机器的棋力甚至超过程序设计者。

这说明:

学习能力本身,可以替代大量手工规则设计。


机器学习的基本概念#

什么是机器学习#

机器学习可以概括为:

  • 从数据中提取特征;
  • 学习一个映射函数(mapping function);
  • 使原始数据被映射到某个任务空间;
  • 从而完成分类、回归、聚类或决策。

例如:

  • 输入图像,输出“人 / 狗 / 车”等类别;
  • 输入文本,输出“喜悦 / 愤怒”等情感标签;
  • 输入用户行为数据,输出推荐结果;
  • 输入环境状态,输出行动策略。

所以它的本质不是“记住样本”,而是:

从样本中抽象出可迁移的模式。

机器学习的三大类#

从数据利用方式看,机器学习通常分为三类:

1. 监督学习#

  • 数据 有标签
  • 目标是学习输入到输出的映射;
  • 常见任务:
    • 分类(classification)
    • 回归(regression)

2. 无监督学习#

  • 数据 无标签
  • 目标是发现数据内部的结构、模式或分布;
  • 常见任务:
    • 聚类(clustering)
    • 降维(dimensionality reduction)

3. 强化学习#

  • 数据不是静态样本,而是交互过程
  • 学习主体通过与环境互动来学习;
  • 核心信号不是标签,而是 奖励(reward)
  • 典型任务:
    • 游戏博弈
    • 机器人控制
    • 自动驾驶决策

机器学习的初心是“化繁为简,大道至简”。

现实中的数据往往:

  • 维度高;
  • 噪声多;
  • 结构复杂;
  • 直接观察难以发现规律。

机器学习做的事,就是:

  • 用模型把复杂数据压缩成更简单的表示;
  • 把杂乱无章的样本整理成可解释、可预测、可决策的结构。

从这个角度说,机器学习就是一种 数据抽象技术


机器学习中的特征工程#

什么是特征#

特征(feature) 是用于描述数据的属性或维度。

例如,要预测一个人的收入,可以使用:

  • 年龄;
  • 受教育程度;
  • 工作经验;
  • 地理位置。

这些就是特征。

特征可以分为:

  • 数值型特征:年龄、收入、温度、长度;
  • 类别型特征:性别、城市、学历、职业类别。

特征是模型看世界的方式。

模型性能好不好,很多时候不只取决于算法本身,更取决于你给它看的“世界表示”是否合理。

什么是特征工程#

特征工程(feature engineering) 是对原始数据进行处理、转换和优化的过程,使其更适合机器学习模型学习。

它的核心是:

把原始数据变成模型更容易利用的信息。

特征工程的目标#

1. 提高数据可用性#

通过处理:

  • 缺失值;
  • 重复数据;
  • 异常值;
  • 格式不一致;

让数据更干净、更规范。

2. 增强模型预测能力#

通过构造更有意义的特征,让模型更容易发现潜在模式。

3. 简化模型训练#

通过筛选有效特征、降低维度,减少无关信息干扰,提高训练效率。

特征工程的一般步骤#

1. 数据清洗#

原始数据常见问题:

  • 缺失值;
  • 异常值;
  • 重复样本;
  • 录入错误。

常见处理方法:

  • 用均值 / 中位数 / 众数填补缺失值;
  • 删除严重缺失的样本;
  • 用统计方法检测异常值;
  • 对异常值进行修正、截断或删除。

2. 特征选择#

不是所有特征都有用。

有些特征:

  • 与目标几乎无关;
  • 冗余严重;
  • 甚至会误导模型。

所以要从大量候选特征中挑出最有信息量的一部分。

常见思路:

  • 过滤法(filter):先用统计关系筛选,例如相关系数;
  • 包裹 / 递归思想:反复训练模型,看哪些特征带来更好结果。

3. 特征转换#

把原始特征变成模型更容易处理的形式。

常见方法:

归一化(normalization)#

把特征缩放到某个固定区间,常见是 [0,1][0,1]

用途:

  • 避免不同量纲差异过大;
  • 加快训练过程;
  • 防止某些大数值特征“压制”其他特征。
标准化(standardization)#

把特征变成:

  • 均值为 0;
  • 方差为 1。

它特别常见于:

  • 线性模型;
  • 支持向量机;
  • 基于距离的算法。

4. 特征构造#

由已有特征生成新的特征。

例如:

  • 从日期中提取星期、月份、季节;
  • 把收入和年龄组合成“收入/年龄比”;
  • 把连续年龄分箱成“青年、中年、老年”。

很多时候,模型不是不会学,而是你根本没把有用信息显式提供给它。

5. 类别特征编码#

很多模型不能直接处理字符串类别,因此要转成数字。

常见方法:

标签编码(label encoding)#
  • 给每个类别一个整数编号;
  • 例如:男 = 0,女 = 1。
独热编码(one-hot encoding)#
  • 把类别变成二进制向量;
  • 例如:
    • 男 = [1, 0]
    • 女 = [0, 1]

独热编码通常更安全,因为它不会人为引入类别之间的大小顺序。

特征工程为什么重要#

在机器学习中,数据质量往往比模型选择更重要。

原因很直接:

  • 再先进的模型,如果输入特征没有信息量,也学不出东西;
  • 相反,特征设计得好,哪怕模型不复杂,也可能效果很好。

在很多实际问题里,真正困难的不是“选哪个模型”,而是:

  • 该把什么当作输入特征;
  • 如何让这些特征真正反映任务结构。

这点在人文社科、推荐系统、经济预测、用户分析等任务里尤其明显。


监督学习#

监督学习的定义#

监督学习使用的是 带标签数据

训练集通常记为:

D={(xi,yi)}i=1nD = \{(x_i, y_i)\}_{i=1}^n

其中:

  • xix_i 表示输入样本;
  • yiy_i 表示对应标签;
  • nn 表示样本数量。

监督学习的目标是学习一个映射函数:

f(x)yf(x) \approx y

也就是:

  • 输入一个样本;
  • 输出尽量接近真实标签的预测结果。

监督学习的三个核心元素#

1. 标注数据:学什么#

模型需要知道“什么是正确答案”。

2. 学习模型:如何学#

也就是用什么模型来表达输入与输出的关系。

3. 损失函数:学到否#

损失函数用来衡量:

  • 模型预测得对不对;
  • 错了多少;
  • 参数该往哪个方向调整。

损失函数#

损失函数(loss function)衡量预测值与真实值之间的差距。

若把模型记作 ff,则监督学习训练的目标通常写成:

mini=1nLoss(f(xi),yi)\min \sum_{i=1}^{n} Loss(f(x_i), y_i)

也就是:

找到一组参数,使训练集上的总损失尽可能小。

常见损失函数#

1. 0-1 损失#
Loss(y,f(x))={1,f(x)y0,f(x)=yLoss(y, f(x))= \begin{cases} 1, & f(x) \ne y \\ 0, & f(x) = y \end{cases}

适合表达分类对错,但优化时往往不方便。

2. 平方损失#
Loss(y,f(x))=(yf(x))2Loss(y, f(x)) = (y - f(x))^2

回归任务非常常见。

3. 绝对损失#
Loss(y,f(x))=yf(x)Loss(y, f(x)) = |y - f(x)|

对异常值的敏感度通常小于平方损失。

训练集、验证集、测试集#

这是监督学习最基本的实验设置。

1. 训练集(training set)#

  • 用来训练模型参数;
  • 相当于学生平时做练习。

2. 验证集(validation set)#

  • 用来调参、选模型;
  • 相当于模拟考。

3. 测试集(test set)#

  • 用来评估最终性能;
  • 相当于正式考试。

最重要的要求:

三者之间不能有重叠。

否则测试结果就不可信。

经验风险与期望风险#

经验风险(empirical risk)#

模型在训练集上的平均损失。

直观理解:

  • 你在已见过的数据上表现怎样。

期望风险(expected risk)#

模型在真实数据分布上的平均损失。

直观理解:

  • 你在未来、未见过的数据上表现怎样。

两者关系:

  • 样本足够多时,经验风险会逼近期望风险;
  • 但现实中样本有限,所以两者往往不一样。

这正是泛化问题的根源。

过拟合与欠拟合#

欠拟合(underfitting)#

模型太简单:

  • 连训练集都学不好;
  • 训练误差大;
  • 测试误差通常也大。

过拟合(overfitting)#

模型太复杂:

  • 把训练集甚至噪声都“记住”了;
  • 训练误差很小;
  • 测试误差却变大。

结构风险最小化#

经验风险最小化只关心:

  • “在训练集上误差小不小”。

但这不够,因为模型可能过拟合。

所以要加上对模型复杂度的约束:

mini=1nLoss(f(xi),yi)+λΩ(f)\min \sum_{i=1}^{n} Loss(f(x_i), y_i) + \lambda \Omega(f)

其中:

  • 第一项:经验风险;
  • 第二项:模型复杂度惩罚(正则项);
  • λ\lambda:平衡二者的强度。

这就是 结构风险最小化(structural risk minimization) 的思想。

不要只追求把训练集拟合得特别好,还要控制模型别太复杂。

回归任务与分类任务#

监督学习常见任务分两大类。

1. 回归(regression)#

预测的是 连续数值

例如:

  • 房价预测;
  • 气温预测;
  • 销量预测;
  • 二氧化碳浓度预测。

2. 分类(classification)#

预测的是 离散类别

例如:

  • 苹果 / 桔子;
  • 猫 / 狗;
  • 垃圾邮件 / 正常邮件;
  • 良性 / 恶性。

线性回归#

最简单的回归模型就是一元线性回归:

y=ax+by = ax + b

其中:

  • xx 是输入;
  • yy 是输出;
  • a,ba,b 是待学习参数。

它的思想很朴素:

  • 假设输入和输出之间大体满足线性关系;
  • 再从数据中估计最合适的 a,ba,b

参数怎么求#

对每个样本点 (xi,yi)(x_i, y_i),模型预测值记为:

y^i=axi+b\hat y_i = ax_i + b

误差常用平方形式表示:

(yiy^i)2(y_i - \hat y_i)^2

总目标就是最小化均方误差:

1ni=1n(yiy^i)2\frac{1}{n} \sum_{i=1}^{n}(y_i - \hat y_i)^2

这就是最小二乘法(ordinary least squares, OLS)的核心思想。

多元线性回归#

如果输入不止一个特征,就得到:

y^=a0+j=1dajxj\hat y = a_0 + \sum_{j=1}^{d} a_j x_j

也可写成更紧凑的形式:

y^=a0+aTx\hat y = a_0 + a^T x

含义很简单:

  • 每个特征都有一个权重;
  • 最后加权求和得到预测值。

Logistic Regression#

线性回归有个典型问题:

  • 输出范围是 (,+)(-\infty, +\infty)
  • 对离群点比较敏感;
  • 不适合直接处理二分类概率输出。

于是引入 sigmoid 函数

σ(z)=11+ez\sigma(z)=\frac{1}{1+e^{-z}}

再令:

z=wTx+bz = w^T x + b

就得到逻辑斯蒂回归:

y=11+e(wTx+b)y = \frac{1}{1+e^{-(w^T x+b)}}

它的好处是:

  • 输出范围在 (0,1)(0,1)
  • 可以解释为概率;
  • 特别适合二分类问题。

sigmoid 的直观理解#

  • zz 很大时,输出接近 1;
  • zz 很小时,输出接近 0;
  • z=0z=0 时,输出是 0.5。

所以它天然适合作为“属于正类的概率”。

分类任务的一个直观例子#

假设模型写成:

Y=A颜色+B大小+CY = A \cdot 颜色 + B \cdot 大小 + C

其中:

  • 颜色和大小是输入特征;
  • A,B,CA,B,C 是模型参数。

给定训练样本:

  • 苹果记为 1;
  • 桔子记为 0;

就希望模型输出 YY 尽量接近真实标签 TT

于是可以设计损失函数,例如:

L=i=1nTiYiL = \sum_{i=1}^{n} |T_i - Y_i|

然后不断调整参数,让损失越来越小。

这其实已经把监督学习的核心过程讲完了:

  • 先定义模型;
  • 再定义损失;
  • 然后不断调参数最小化损失。

模型评估:分类指标#

  • TP:真正例
  • FP:假正例
  • TN:真反例
  • FN:假反例

1. 准确率(Accuracy)#

Accuracy=TP+TNP+NAccuracy = \frac{TP+TN}{P+N}

表示总体预测正确的比例。

问题:

  • 当类别极不平衡时,准确率可能具有误导性。

2. 错误率(Error Rate)#

ErrorRate=FP+FNP+N=1AccuracyErrorRate = \frac{FP+FN}{P+N} = 1 - Accuracy

3. 精确率(Precision)#

Precision=TPTP+FPPrecision = \frac{TP}{TP+FP}

表示:

  • 被模型预测为正例的样本中,真正为正例的比例。

4. 召回率(Recall)#

Recall=TPTP+FN=TPPRecall = \frac{TP}{TP+FN} = \frac{TP}{P}

表示:

  • 所有真正正例中,被找回来的比例。

5. F1-score#

F1=2PrecisionRecallPrecision+RecallF1 = 2 \cdot \frac{Precision \cdot Recall}{Precision + Recall}

它是 precision 和 recall 的调和平均。

适用场景:

  • 当你既关心查准率,也关心查全率时。

监督学习的优势与局限#

优势#

  1. 目标明确

    • 有输入,也有标准答案,训练目标清晰。
  2. 应用成熟

    • 图像分类、语音识别、文本翻译、诊断预测等都很成功。
  3. 算法丰富

    • 从线性模型到深度学习,工具链非常成熟。
  4. 效果强

    • 在大量高质量标注数据支持下,性能常常很高。

局限#

  1. 强依赖标注数据

    • 标注成本高,尤其在医学、法律等专业领域。
  2. 对数据分布敏感

    • 训练集和实际场景分布偏差较大时,模型容易失效。
  3. 泛化能力有限

    • 遇到新任务往往要重新标注、重新训练。
  4. 传统方法较依赖特征工程

    • 深度学习缓解了这一点,但并未彻底消除。
  5. 易出现过拟合

    • 尤其在模型复杂、数据不足时。

无监督学习#

无监督学习的定义#

无监督学习不使用标签。

它面对的是一组没有标准答案的数据:

D={xi}i=1nD = \{x_i\}_{i=1}^{n}

目标不是预测某个已知输出,而是:

  • 发现数据中的内在结构;
  • 找出相似样本;
  • 揭示潜在模式;
  • 做组织、压缩或表示学习。

所以无监督学习特别适合:

  • 标签难获得;
  • 想先探索数据本身长什么样;
  • 不知道应该如何定义答案的场景。

无监督学习的直观例子#

假设收集了一堆水果图片,但不知道它们的名字。

这时:

  • 不能做监督学习,因为没有“苹果 / 香蕉 / 桃子”的标签;
  • 但仍可以让模型根据相似性自动分组。

最终可能形成:

  • 苹果一组;
  • 香蕉一组;
  • 桃子一组。

这就是 聚类(clustering)

聚类的核心思想#

聚类就是:

把相似的样本放在一起,把不相似的样本分开。

应用很广:

  • 商品分组;
  • 用户分群;
  • 论文主题归类;
  • 图像分割;
  • 异常检测前处理。

K 均值聚类(K-means)#

这是最经典的无监督学习算法之一。

它的目标是:

  • 给定 nn 个无标签数据点;
  • 把它们划分到 kk 个簇(cluster)中;
  • 使同一簇内更相似,不同簇间更不同。

输入与输出#

  • 输入:nn 个样本,无标签;
  • 输出:kk 个聚类结果。

相似度度量#

K 均值常用 欧氏距离(Euclidean distance)

d(xi,xj)=(xi1xj1)2+(xi2xj2)2++(xidxjd)2d(x_i, x_j)=\sqrt{(x_{i1}-x_{j1})^2 + (x_{i2}-x_{j2})^2 + \cdots + (x_{id}-x_{jd})^2}

距离越小,说明样本越相似。

算法步骤#

第一步:确定簇数 kk#

这是用户事先指定的。

第二步:初始化质心#

随机选取 kk 个点作为初始簇中心(centroid)。

第三步:分配样本#

对每个数据点,计算它到每个质心的距离,并把它分配给最近的那个质心对应的簇。

第四步:更新质心#

对每个簇,计算簇内样本均值,把这个均值作为新的质心。

若第 jj 个簇记为 SjS_j,则其质心可写成:

cj=1SjxiSjxic_j = \frac{1}{|S_j|} \sum_{x_i \in S_j} x_i
第五步:重复迭代#

不断重复“分配样本”和“更新质心”两个步骤,直到:

  • 达到最大迭代次数;
  • 或前后两次质心几乎不再变化。

K 均值的直观理解#

  • 先随便放几个“代表点”;
  • 再让每个样本找到离自己最近的代表点;
  • 然后让代表点移动到各自成员的中心位置;
  • 反复几轮以后,分组就稳定了。

K 均值的应用#

  • 图像分割;
  • 文档聚类;
  • 商品推荐;
  • 大规模论文自动归类。

无监督学习的优势与局限#

优势#

  1. 不需要标签

    • 节省大量人工标注成本。
  2. 擅长探索数据结构

    • 能发现事先未知的模式和群体。
  3. 适合海量原始数据

    • 特别适用于行为分析、文本分析、基因数据等。
  4. 能作为其他任务前处理

    • 例如可视化、降维、推荐、异常检测。

局限#

  1. 结果难评估

    • 因为没有标准答案,常需要结合领域知识解释。
  2. 对算法和参数敏感

    • 例如 K 值选错,聚类结果可能完全不同。
  3. 对噪声和异常值敏感

    • 少量脏数据就可能影响整体分组。
  4. 计算成本可能较高

    • 特别在大规模高维数据上。
  5. 结果可能过度简化

    • 某些方法会忽略复杂的非线性结构。

强化学习#

强化学习的基本思想#

强化学习不是“看题做题”,而是“边试边学”。

它主要解决的是:

在一个不断变化的环境里,应该怎么行动,才能长期收益最大?

与监督学习相比:

  • 监督学习:直接给标准答案;
  • 强化学习:不给标准答案,只给奖励或惩罚。

强化学习的核心:

用奖励信号代替直接监督,让智能体通过试错逐步学会策略。

强化学习的六个核心概念#

1. 智能体(agent)#

执行动作、做决策的主体。

例如:

  • 游戏角色;
  • 机器人;
  • 自动驾驶系统;
  • 棋类 AI。

2. 环境(environment)#

智能体之外的一切。

环境会:

  • 接收动作;
  • 改变状态;
  • 返回奖励。

3. 状态(state)#

智能体对当前环境的描述或编码。

它回答的是:

  • “我现在处在什么情况?”

4. 动作(action)#

智能体在当前状态下采取的行为。

5. 奖励(reward)#

环境对动作结果给出的反馈。

  • 正奖励:鼓励;
  • 负奖励:惩罚。

6. 策略(policy)#

策略是“在什么状态下做什么动作”的规则。

强化学习最终学到的,通常就是一个好的策略。

经过反复试错,策略逐渐优化。

强化学习的特点#

1. 没有显式标签#

它不会告诉你“这一步的标准答案是什么”。

2. 通过互动学习#

必须和环境不断交互。

3. 重视长期收益#

有时一个动作眼前没收益,但能为后续带来更大奖励。

4. 适合序列决策问题#

因为动作会影响下一时刻状态。

强化学习的应用#

  • AlphaGo:围棋;
  • AlphaStar:星际争霸;
  • 机器人动作控制;
  • 自动驾驶决策;
  • 复杂资源调度与路径规划。

强化学习的难点#

  1. 探索 vs 利用

    • 已知有效的动作要不要继续用?
    • 还是去尝试新动作?
  2. 奖励延迟

    • 有些动作的好坏,要很久以后才知道。
  3. 状态空间可能很大

    • 现实任务通常远比小迷宫复杂。
  4. 训练成本高

    • 往往需要大量试错。

所以强化学习很强,但也往往最难训练、最依赖设计。


三类学习方法对比#

1. 监督学习#

  • 有没有标签:有
  • 学什么:输入到输出的映射
  • 典型任务:分类、回归
  • 代表关键词:损失函数、训练集、泛化、过拟合

2. 无监督学习#

  • 有没有标签:没有
  • 学什么:数据内部结构
  • 典型任务:聚类、降维
  • 代表关键词:相似性、簇、模式发现

3. 强化学习#

  • 有没有标签:没有直接标签,但有奖励
  • 学什么:状态到动作的策略
  • 典型任务:博弈、控制、序列决策
  • 代表关键词:智能体、环境、奖励、策略

机器学习
https://www.lazysheep2031.top/posts/ai_fundamention/chapter3/
作者
Lazysheep
发布于
2026-04-14
许可协议
CC BY-NC-SA 4.0