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

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 深度学习的基本训练流程(概览)

权重初始化
前向传播:计算当前模型,在当前输入下的答案。(学生做题)
计算损失:用损失函数 L(预测, 真实) 衡量误差。(老师打分)
反向传播:用链式法则计算每个参数对损失的梯度。(老师引导学生订正:朝哪里改会更好?)
参数更新:利用梯度下降或其变种(SGD、Momentum、Adam)更新参数。(学生根据老师的指点/梯度更正解题思路/更新参数)
重复以上步骤直至收敛或达到停止条件。(不断地做题、对答案、改正,直到学生在大部分练习题上表现都很好)
2 损失函数
损失函数把模型的输出压成一个实数:模型这次扣了多少分。它必须满足两件事——只在预测完全正确时最小,并且可导(否则没法算梯度)。
三个最常用的:
回归任务:均方误差(MSE)
直接用距离的平方(的平均值)来衡量偏差程度。
二分类:二元交叉熵(Binary Cross-Entropy)
标签 y 是 0 或 1,预测 ŷ 是 0 到 1 之间的概率。
多分类:Softmax + 交叉熵
3 梯度、反向传播
梯度是“导数Pro Max”
梯度聚合了多个参数对于函数值的导数信息。像一张表,记录每个旋钮调一点点,函数值会变化多少。
所以一般我们讨论的梯度,是参数对Loss函数的梯度。假设Loss函数局部平滑,那么梯度方向是Loss增长最快的方向。
而我们调试一个未知的机器(函数),一般就是一个一个参数,一点一点调。如何理解此时我们运用的就是梯度信息?
并且注意,梯度指向的是Loss增长方向,我们希望的是优化Loss使之降低。
上述调旋钮的过程就是梯度下降的比喻。
在计算机中,梯度一般基于链式求导法则直接计算。链的传播方向是从损失函数回溯到具体参数(旋钮),便得名“反向传播”。
写成链式法则就是一连串乘法:
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,一百多行,四个部件都标了注释。
- 数据:模拟的生成数据,见5.2节。80%训练集,20%测试集。测试集不参与训练,仅测试,类似考试。这样分隔防止死背训练集的答案。
- 模型:采用经典神经网络结构:多层感知机
nn.Linear(6, 16) → ReLU → nn.Linear(16, 8) → ReLU → nn.Linear(8, 1)6 个特征是输入,1 个分数是输出。
- 损失函数:
nn.BCEWithLogitsLoss(),也就是二元交叉熵。 - 优化器:
Adam(lr=0.006),150 轮,每批 64 条。
跑起来就两条命令:
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、优化器
训练步骤:前向、损失、反向、更新
