PaperGroup

机器学习导论:从预测点名开始

发布于 2026/10/24字数: 3733 字阅读: 约 19 分钟
机器学习导论:从预测点名开始

2026 级技术部第一次分享会:机器学习三大范式、深度学习四大部件,以及一个能预测老师点不点名的完整案例。

机器学习导论

一、机器学习的本质定义

1. 核心目标

让计算机从数据中自动学习规律,无需显式编程就能完成特定任务(比如预测、分类、决策)。

现实世界中的数据格式乱,关系乱,计算机无法理解。需要学习一套对应规则,把现实世界数据映射到计算机可直接消费的数据。

用编程解决问题,传统方式是「输入规则 + 数据→输出结果」,机器学习是「输入数据 + 结果→输出规则」。

也就是说机器学习学习的东西就是如何创建一个规则,把输入的数据应用于这个规则得到正确的输出:

经验上看,有大量的 Output = F(Input) 的案例。

求最优函数(映射)F。

2. 核心术语

  • 数据:学习的原材料(如图片、表格、文本),分为「特征(输入)」和「标签(输出 / 目标)」。可以理解为例题和参考答案的关系。
  • 模型:可以理解为机器学习的「最终成果」。它就本质上就是根据海量数据训练出的“智能函数”(例如 y = f(x))。给它一个输入(x,如一张猫的图片),它就能根据学到的规则(可以理解为函数里写的逻辑处理代码),输出一个预测结果(y,如“猫”这个标签)。它本质上就是那套解决特定问题的“方法”或“大脑”。
  • 训练:模型从数据中找规律的过程(制定规则的过程);
  • 泛化能力:模型在「新数据」上的表现(核心评价标准,避免 “死记硬背” 数据);

此处为了方便同学理解,我们采用了通俗的比喻,严谨的定义详细看到我们后面要阅读的鱼书


二、三大主流学习范式

(一)有监督学习

1. 核心特征:有「标签」的 “老师教学”
  • 数据特点:每个样本都有明确的「输入(特征)→输出(标签)」对应关系(如 “图片→猫 / 狗”“房屋面积→房价”);
  • 学习预期形式:Y=F(X),其中Y和X直接提供,尝试得到最优F。
  • 学习目标:学习「输入到输出的映射关系」,让模型能对新输入预测出正确标签。
2. 两大核心任务
任务类型 输出类型 典型场景 传统实现方法 深度学习实现方法
分类 离散标签(如 0/1、猫 / 狗) 垃圾邮件识别、图像识别、疾病诊断 逻辑回归、决策树、SVM CNN(图像分类)、Transformer(文本分类)
回归 连续标签(如价格、温度) 房价预测、股票走势预测、销量预估 线性回归、随机森林 全连接神经网络、LSTM(时序回归)
3. 关键注意点
  • 标签质量决定模型上限(“老师教错了,学生再努力也没用”);
  • 常见问题:
    • 过拟合(相当于模型“做作业”来回只看那几道题,考试时题目稍微变换一下就不行了)
    • 欠拟合(相当于模型题刷少了,考试时每道题回答得都差点意思)

(二)无监督学习

1. 核心特征:无「标签」的 “自主探索”
  • 数据特点:只有输入特征(X),没有预设标签(Y);
  • 学习目标:发现数据本身的「内在结构 / 规律」(如聚类、隐藏特征),无需外部指导。
2. 三大核心任务
任务类型 定义 典型场景 传统实现方法 深度学习实现方法
聚类 按相似性将数据分组 客户分群、异常检测(如欺诈交易) K-Means、DBSCAN 聚类算法 + 神经网络特征提取
降维 保留核心信息,减少特征维度 高维数据可视化、数据压缩 PCA、LDA 自编码器(Autoencoder)、TSNE
生成任务 学习数据分布,生成新样本 图像生成、文本续写 高斯混合模型(GMM) GAN(生成对抗网络)、VAE(变分自编码器)
3. 关键注意点
  • 无明确 “对错” 标准(如聚类结果是否合理需结合业务判断);
  • 核心价值:挖掘数据中人类难以发现的隐藏规律。

(三)强化学习

1. 核心特征:基于「奖励反馈」的 “试错学习”
  • 核心逻辑:就像训练宠物 。智能体(Agent,比如一只小狗)在特定环境(Environment,比如客厅)中不断尝试各种动作(Action,比如“坐下”或“打滚”)。当它做出正确的动作时,你会给它奖励(Reward,比如零食);做错了则没有奖励或受到温和的惩罚。通过反复试错,小狗最终会学会一套能获得最多零食的行为模式(即“策略”)。
  • 数据特点:无预设标签,数据是「交互过程中产生的序列」(状态 S→动作 A→奖励 R→新状态 S')。
2. 核心要素
  • 智能体(Agent):学习的主体(如自动驾驶汽车、游戏 AI);
  • 环境(Environment):智能体交互的场景(如道路、游戏地图);
  • 状态(State):环境的当前情况(如汽车位置、游戏血量);
  • 动作(Action):智能体的决策(如转弯、攻击);
  • 奖励(Reward):环境对动作的反馈(如通关 + 100 分、撞车 - 100 分)。
3. 典型任务
任务类型 场景举例 传统实现方法 深度学习实现方法
决策优化 自动驾驶、机器人控制 Q-Learning、Sarsa DQN(深度 Q 网络)、PPO(近端策略优化)
游戏竞技 围棋 AI、游戏通关 蒙特卡洛树搜索(MCTS) AlphaGo(MCTS+CNN)、DOTA2 AI
4. 关键注意点
  • 学习过程可能 “耗时耗力”(如 AlphaGo 需大量棋局训练);
  • 核心价值:解决「无明确指导、需长期决策」的复杂问题(传统有监督 / 无监督难以覆盖)。

三、范式对比与核心区别

维度 有监督学习 无监督学习 强化学习
数据要求 带标签的样本数据 无标签的特征数据 交互产生的序列数据
学习方式 模仿标签(归纳映射) 探索结构(发现规律) 试错 + 奖励反馈(优化策略)
核心目标 预测准确 结构清晰 / 生成合理 累积奖励最大
典型评价指标 准确率、MSE(均方误差) 聚类纯度、重构误差 累积奖励值

四、模型实现方法的本质

1. 为什么深度学习不单独列为范式?

  • 深度学习的核心是「深度神经网络」(多层感知机、CNN、Transformer 等),本质是「模型的 “载体 / 结构”」;

  • 同一深度学习结构可适配不同范式:

    • 有监督:CNN 做图像分类(输入图片 + 标签→学习映射);
    • 无监督:自编码器做特征降维(输入图片→学习隐藏特征);
    • 强化学习:DQN 用神经网络拟合 Q 函数(输入状态→输出选择这个动作的价值是多少)。

2. 实现方法的分类逻辑

实现方法类型 代表模型 适配范式
传统线性模型 线性回归、逻辑回归 有监督(主要)、无监督(如 PCA)
树模型 决策树、随机森林、XGBoost 有监督(主要)、无监督(如孤立森林做异常检测)
神经网络(深度学习) CNN、RNN、Transformer 三大范式均适配

目前机器学习最普遍的方法是使用深度学习方法:

深度学习导论

四大部件简介

  • 数据:带标签的数据集 (X, y)。其中X是输入的数据样本,y是其输出的真实标签对照。可以看作带着答案的练习册。

  • 模型:一个复杂的,参数待定的 函数。例如仿脑结构的全连接层 + 非线性激活。就像是学生的大脑,内部有很多“神经元”,最后输出一些数字作为答案(见下图)。

    感知机示意

  • 损失(Loss):衡量模型表现。模型在数据上“考试”打的分。

  • 优化器:使用数学方法,尝试让损失降低的东西。

  • 深度学习训练的关键步骤:前向——计算预测;损失——衡量误差;反向——计算梯度;更新——沿梯度方向调整参数。

此处为了方便理解,我们用通俗的概念进行比喻,更严谨的定义详见鱼书

1 深度学习的基本训练流程(概览)

θ∗←arg⁡min⁡θ L( f(x;θ) , y ) \boldsymbol{\theta}^* \leftarrow \mathop{\arg\min}_{\boldsymbol{\theta}} \ \mathcal{L}\big(\ f(\boldsymbol{x};\boldsymbol{\theta})\ ,\ \boldsymbol{y}\ \big) θ∗←argminθ​ L( f(x;θ) , y )

四要素与训练四步

  1. 权重初始化

  2. 前向传播:计算当前模型,在当前输入下的答案。(学生做题)

  3. 计算损失:用损失函数 L(预测, 真实) 衡量误差。(老师打分)

  4. 反向传播:用链式法则计算每个参数对损失的梯度。(老师引导学生订正:朝哪里改会更好?)

  5. 参数更新:利用梯度下降或其变种(SGD、Momentum、Adam)更新参数。(学生根据老师的指点/梯度更正解题思路/更新参数)

    重复以上步骤直至收敛或达到停止条件。(不断地做题、对答案、改正,直到学生在大部分练习题上表现都很好)

2 损失函数

损失函数把模型的输出压成一个实数:模型这次扣了多少分。它必须满足两件事——只在预测完全正确时最小,并且可导(否则没法算梯度)。

三个最常用的:

回归任务:均方误差(MSE)

L=1n∑i=1n(yi−y^i)2 L=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat y_i)^2 L=n1​i=1∑n​(yi​−y^​i​)2

直接用距离的平方(的平均值)来衡量偏差程度。

二分类:二元交叉熵(Binary Cross-Entropy)

L=−[ylog⁡y^+(1−y)log⁡(1−y^)] L=-\big[y\log\hat y+(1-y)\log(1-\hat y)\big] L=−[ylogy^​+(1−y)log(1−y^​)]

标签 y 是 0 或 1,预测 ŷ 是 0 到 1 之间的概率。

多分类:Softmax + 交叉熵

L=−∑i=1Kyilog⁡y^i L=-\sum_{i=1}^{K} y_i\log\hat y_i L=−i=1∑K​yi​logy^​i​

3 梯度、反向传播

梯度是“导数Pro Max”

梯度聚合了多个参数对于函数值的导数信息。像一张表,记录每个旋钮调一点点,函数值会变化多少。

所以一般我们讨论的梯度,是参数对Loss函数的梯度。假设Loss函数局部平滑,那么梯度方向是Loss增长最快的方向。

而我们调试一个未知的机器(函数),一般就是一个一个参数,一点一点调。如何理解此时我们运用的就是梯度信息?

并且注意,梯度指向的是Loss增长方向,我们希望的是优化Loss使之降低。

上述调旋钮的过程就是梯度下降的比喻。

在计算机中,梯度一般基于链式求导法则直接计算。链的传播方向是从损失函数回溯到具体参数(旋钮),便得名“反向传播”。

写成链式法则就是一连串乘法:

∂L∂w=∂L∂y^⋅∂y^∂z⋅∂z∂w \frac{\partial L}{\partial w}=\frac{\partial L}{\partial \hat y}\cdot\frac{\partial \hat y}{\partial z}\cdot\frac{\partial z}{\partial w} ∂w∂L​=∂y^​∂L​⋅∂z∂y^​​⋅∂w∂z​

4 损失与参数更新:图像演示

下面两张图,一张是“一维切片”(只盯一个旋钮),一张是“整片地形”(两个旋钮一起看)。

4.1 一个旋钮:在曲线上走一步

损失曲线上的一步梯度下降

图注说明(对应图中标记):

  • 横轴表示某一标量参数(“旋钮”);纵轴表示对应的损失 L(θ)。
  • 曲线显示了损失随参数变化的形状。
  • 当前点表示当前参数值处的损失高度,即当前预测值与实际值的距离,切线斜率给出局部导数(梯度)信息。
  • 红色虚线是当前点的切线;绿色箭头就是一步更新,落脚点由“梯度 × 学习率”决定。后面几个淡绿色的点是第二、第三、第四步。

如果切线在当前点向上(梯度为正),说明在该方向上增加参数会增加损失;梯度为负则说明增加参数会降低损失。因而参数更新沿梯度的负方向移动,以减少损失。

4.2 两个旋钮:一片地形

损失地形

你可以想象一下,在浓雾弥漫的晚上,下山的过程。

山的地形图就是Loss在参数空间的景观(“Landscape”)。

横纵两个轴是两个参数(两个旋钮),深浅是损失,每条线是“等高线”。人在红点处,四面是雾,看不见谷底在哪,只能摸一摸脚下的坡度:哪边下坡快,就往哪边走一步,然后再摸一次。这条红线就是整个训练过程。

而我们不可能遍历整个参数空间然后传送到最低点:参数规模一般上万,百万甚至十亿。(大雾晚上看不见周围)。

因此,我们只能试探局部,哪里下山最快,就往哪里走(这个比喻仅对应直接梯度下降优化器)。

5 案例(课后任务):预测水课点名器

给一节马上要上的课,输出“这节课会点名”的概率。

  • 输入:这节课我们已经知道的信息(下面会说 6 个)
  • 输出:0 到 1 之间的一个数
  • 为什么不是直接报“点 / 不点”:老师有随机性,硬给答案会丢掉“有多大把握”;概率超过 0.5 再报“会点名”,还能量化把握。

这是一个二分类任务。四个要素在这道题里的分工是:

要素 在这道题里具体是什么
数据与任务 一张 1200 行的表格,最后一列是 0/1 的点名记录
网络 6 个输入 → 16 → 8 → 1 个输出的全连接网络
损失函数 二元交叉熵(BCE)
优化器 Adam

5.2 数据长什么样

列名 含义
water 课程水课程度 1–5
strict 老师严格程度 1–5
class_size 班级人数
period 第几节(1–2 是早八)
week 第几周
last3_rate 前三节课的实际点名率
called 标签:这节课点没点(1/0)

5.3 四个部件怎么搭

代码在 10_代码资源/rollcall-predictor/train_rollcall.py,一百多行,四个部件都标了注释。

  1. 数据:模拟的生成数据,见5.2节。80%训练集,20%测试集。测试集不参与训练,仅测试,类似考试。这样分隔防止死背训练集的答案。
  2. 模型:采用经典神经网络结构:多层感知机
</> python1 行
nn.Linear(6, 16) → ReLU → nn.Linear(16, 8) → ReLU → nn.Linear(8, 1)

6 个特征是输入,1 个分数是输出。

  1. 损失函数:nn.BCEWithLogitsLoss(),也就是二元交叉熵。
  2. 优化器:Adam(lr=0.006),150 轮,每批 64 条。

跑起来就两条命令:

</> powershell2 行
python make_rollcall_data.py   # 重新生成数据(已生成过可跳过)
python train_rollcall.py       # 训练 + 出图

5.4 训完之后看到了什么

训练曲线

左图是损失:训练集从 0.67 掉到 0.37,验证集从 0.67 掉到 0.47。右图是准确率:训练集 84%,验证集 79%。

下面是模型学到的规律:

预测概率热力图

5.5 思考:为什么准确率停在 79%?是否太低了?

6 小结

四大部件:数据、模型、Loss、优化器

训练步骤:前向、损失、反向、更新

相关文章

Agent2

Agent2

Agent2

Agent

Agent

Agent

硅原游牧 · 云端数字史诗
邮箱
GitHub