☰
机器学习期末复习题库高效使用指南:从刷题到真懂
2026/10/15 21:46:24 网站建设 项目流程

简介:这份《机器学习期末复习题.pdf》面向高校学生与备考机器学习课程的读者,用于系统梳理期末考点、检验知识掌握程度。内容覆盖监督学习与无监督学习、概率分布与共轭先验、朴素贝叶斯分类器、决策函数、线性分类方法、支持向量机、集成学习、决策树、过拟合与正则化等核心章节,题型以单选为主,并配有解析思路,便于对照复习。资源包共1个文件,为PDF格式,大小约4.83MB,结构紧凑,适合打印或平板阅读。目前已有13523人学习下载,热度较高。读者可借助题库快速定位薄弱知识点,理解SVM核函数与软间隔参数、Bagging与Boosting差异、决策树划分指标、KL散度与密度聚类等易错内容,适合期末冲刺与查漏补缺。

1. 从一份 85 题单选加 40 题多选的题库说起:这份机器学习期末复习题到底怎么用

期末前一周,实验室里最常见的场景是:几个人围着一份 PDF 题库,从第一题开始往下刷,刷到 SVM 那几题开始卡壳,翻回教材又找不到对应章节,最后干脆背答案。这份《机器学习期末复习题.pdf》就是典型的这种材料——85 道单选题、40 道多选题、12 道简答题,覆盖监督与无监督学习、贝叶斯决策、线性分类、SVM、集成学习、聚类、降维、神经网络、概率图模型这些机器学习课程的核心考点。它不教你从零推导公式,但能帮你快速定位「哪个知识点我其实没搞懂」。适合两类人:一是期末冲刺想查漏补缺的,二是面试前想快速过一遍基础概念的。关键在于别把它当背诵材料,而是当诊断工具用。

2. 把题库拆成知识模块:从监督/无监督到概率图模型的映射方法

2.1 先做一次模块归类,别按题号顺序刷

拿到题库直接从头做到尾,效率其实很低。原因是题目顺序并不完全按知识模块排列,中间会穿插不同章节的内容。我一般会先按考点把题目归到几个大类里,再逐类攻克。这份题库大致可以分成下面这些模块:

模块涉及题号(单选)核心考点
学习范式分类1, 2, 67, 84监督 vs 无监督 vs 分类 vs 聚类
概率分布与贝叶斯3, 4, 5, 6, 7, 69共轭分布、朴素贝叶斯、决策函数
线性分类与回归8, 9, 10, 11, 12, 29, 30, 31感知机、Logistic、LDA、正则化
SVM13, 14, 15, 16, 17, 18, 26, 27, 65最大间隔、对偶、核函数、软间隔
决策树与集成学习19, 20, 21, 22, 23, 24, 25, 53, 70, 72信息增益、Bagging、Boosting、随机森林
聚类34, 35, 58, 82K-Means、密度聚类、GMM、EM
降维与特征选择36, 37, 63, 74PCA、LDA、SVD、特征选择
神经网络与深度学习41, 47, 51, 52, 54, 55, 57, 60, 61, 62, 64, 79, 80, 81激活函数、梯度下降、CNN、RNN、GRU/LSTM
概率图模型39, 40, 44, 45, 75, 77马尔可夫毯、HMM、维特比算法
模型评估与过拟合38, 48, 49, 50, 59, 66, 73偏差方差、正则化、Precision/Recall

归类之后你会发现,SVM 和神经网络这两块题目最多,也最容易出错。先集中火力把这两块吃透,再去处理其他模块,整体效率会高很多。

2.2 用错题反查知识盲区,而不是直接看答案

归类完之后,我的做法是先做一遍,但做的时候不翻答案,把不确定的题目标记出来。做完之后统计每个模块的错误率,错误率高的模块就是需要重点复习的。比如你在 SVM 那块错了 5 题以上,说明对偶问题和核函数的理解还不到位,这时候应该回去翻教材对应的推导,而不是把答案背下来。

具体操作上,可以用一个简单的表格来跟踪:

# 错题追踪表:按模块统计错误率 modules = { "SVM": {"total": 9, "wrong": 0}, "神经网络": {"total": 14, "wrong": 0}, "集成学习": {"total": 10, "wrong": 0}, "聚类": {"total": 4, "wrong": 0}, "概率图模型": {"total": 6, "wrong": 0}, } # 做完一遍后填入错误数,计算错误率 for name, info in modules.items(): rate = info["wrong"] / info["total"] * 100 print(f"{name}: 错误率 {rate:.1f}%")

这段代码没什么技术含量,但它的作用是让你把注意力放在「哪个模块弱」而不是「哪道题对了」。错误率超过 30% 的模块,建议先看教材对应章节,再回来重做。

2.3 多选题是区分度最高的部分,别跳过

很多人刷题只做单选,多选题直接跳过。但从这份题库来看,多选题覆盖的知识点更综合,比如第 32 题考各算法的损失函数对应关系,第 33 题考正则化的多种形式,第 40 题考 Bagging 和 Boosting 在偏差方差上的区别。这些题目如果只靠单选的知识点去应付,很容易漏选。

我的建议是多选题至少做两遍。第一遍按直觉选,第二遍对照教材确认每个选项为什么对、为什么错。比如第 22 题问 SVM 欠拟合时怎么改进,答案是增大 C 和增大 gamma,这两个参数的方向如果记反了,考试时就会丢分。

3. 高频考点逐个拆:SVM 对偶、K-Means 迭代与 CNN 参数计算的手算流程

3.1 SVM 对偶问题与支持向量的判定

题库里第 13 到 18 题、第 26、27、65 题都是 SVM 相关。核心考点有三个:最大间隔分类的几何意义、对偶问题的形式、支持向量的定义。

以第 65 题为例:两个样本点,正样本 (0, -1),负样本 (2, 3),求线性 SVM 的分类面方程。这道题需要手算。步骤是这样的:

import numpy as np # 正样本 x1 = (0, -1), 标签 y1 = +1 # 负样本 x2 = (2, 3), 标签 y2 = -1 x1 = np.array([0, -1]) x2 = np.array([2, 3]) y1, y2 = 1, -1 # 对于线性 SVM,决策面 w^T x + b = 0 # 支持向量满足 y_i (w^T x_i + b) = 1 # 两点的中点在分类面上:w^T (x1+x2)/2 + b = 0 # 且 w 方向与 (x1 - x2) 平行 # 计算 w 的方向 w = x1 - x2 # 或者 x2 - x1,方向相反但分类面相同 print("w 方向:", w) # [-2, -4] # 归一化后 w = (-1, -2) 或 (1, 2) # 代入支持向量条件求 b # 取 w = (-1, -2),则 w^T x1 + b = 1 => 0 + 2 + b = 1 => b = -1 # 验证:w^T x2 + b = -2 - 6 - 1 = -9,不满足 -1 的条件 # 需要重新缩放 # 正确做法:设 w = (a, b),满足 # w^T x1 + b = 1 => -b + b = 1 (这里变量名冲突,换符号) # 设 w = (w1, w2) # w1*0 + w2*(-1) + b0 = 1 => -w2 + b0 = 1 # w1*2 + w2*3 + b0 = -1 => 2*w1 + 3*w2 + b0 = -1 # 且 w1/w2 = (0-2)/(-1-3) = -2/-4 = 1/2 => w2 = 2*w1 # 代入:-2*w1 + b0 = 1 # 2*w1 + 6*w1 + b0 = -1 => 8*w1 + b0 = -1 # 两式相减:10*w1 = -2 => w1 = -0.2, w2 = -0.4, b0 = 1 + 2*(-0.2) = 0.6 # 乘以 -5 化简:w = (1, 2), b = -3 # 分类面:x + 2y - 3 = 0 print("分类面方程: x + 2y = 3")

这段推导的关键在于:两个样本点恰好都是支持向量,所以它们都满足 ( y_i(w^T x_i + b) = 1 )。再加上 ( w ) 的方向与两点连线平行,三个方程解三个未知数。最终答案是 ( x + 2y = 3 ),对应选项 C。

参数说明:这里的 ( w ) 是法向量,决定分类面的方向;( b ) 是偏置,决定分类面的位置。支持向量就是恰好落在间隔边界上的点,它们决定了最终的分类面。

3.2 K-Means 手算迭代过程

第 82 题是一道典型的 K-Means 手算题。给定两个初始种子点 A(-1, 1) 和 B(2, 1),其余点有 (0,0)、(0,2)、(1,1)、(3,2)、(6,0)、(6,2),问最终种子点移动次数和各类点数。

手算流程如下:

import numpy as np # 初始种子点 centers = np.array([[-1, 1], [2, 1]]) points = np.array([[0, 0], [0, 2], [1, 1], [3, 2], [6, 0], [6, 2]]) def assign_points(centers, points): """将每个点分配给最近的聚类中心""" labels = [] for p in points: dists = [np.linalg.norm(p - c) for c in centers] labels.append(np.argmin(dists)) return np.array(labels) def update_centers(centers, points, labels): """按坐标平均更新聚类中心""" new_centers = [] for i in range(len(centers)): cluster_points = points[labels == i] if len(cluster_points) > 0: new_centers.append(cluster_points.mean(axis=0)) else: new_centers.append(centers[i]) return np.array(new_centers) # 第一轮迭代 labels = assign_points(centers, points) print("第一轮分配:", labels) new_centers = update_centers(centers, points, labels) print("第一轮新中心:", new_centers) # 继续迭代直到收敛 for iteration in range(10): labels = assign_points(new_centers, points) updated = update_centers(new_centers, points, labels) if np.allclose(updated, new_centers): print(f"第 {iteration+2} 轮收敛") break new_centers = updated print(f"第 {iteration+2} 轮中心:", new_centers) print("最终中心:", new_centers) print("最终分配:", labels)

运行这段代码可以验证:种子点 A 移动 2 次,种子点 B 移动 2 次,属于 A 的点有 3 个(不含 A 本身),属于 B 的点有 3 个(不含 B 本身)。答案是 A。

参数说明:K-Means 的核心参数是聚类数 K 和初始中心的选择。初始中心不同,最终结果可能不同,这也是第 58 题强调的「初始值不同,最终结果可能不同」。距离度量默认用欧氏距离,如果换成余弦距离或曼哈顿距离,聚类结果也会变化。

3.3 CNN 卷积层输出尺度与参数量计算

第 11 题(简答题)要求计算卷积层的输出尺度和参数量。输入是 3 个 32×32 的特征图,10 个 5×5 的卷积核,Stride=1,Padding=2。

计算公式:

# 输出尺度公式:H_out = (H_in + 2*pad - kernel_size) / stride + 1 H_in = 32 pad = 2 kernel = 5 stride = 1 H_out = (H_in + 2 * pad - kernel) / stride + 1 print(f"输出尺度: {int(H_out)}x{int(H_out)}") # 32x32 # 参数量公式:(kernel_h * kernel_w * in_channels + 1) * out_channels in_channels = 3 out_channels = 10 params = (kernel * kernel * in_channels + 1) * out_channels print(f"卷积层参数: {params}") # (5*5*3+1)*10 = 760

输出尺度是 32×32,因为 padding=2 恰好补偿了 5×5 卷积核带来的尺寸缩减。参数量是 760,其中 5×5×3 是每个卷积核的权重数,加 1 是偏置项,乘以 10 是 10 个卷积核。

这里容易踩的坑是:偏置项不要漏掉。很多人算参数量时只算权重,忘了每个卷积核还有一个偏置参数。另外,如果输入是多通道的,卷积核的深度必须等于输入通道数,这一点在计算时不能搞错。

4. 避坑与排查:题库里那些容易记反、算错、理解偏的考点

4.1 现象:把 L1 和 L2 正则化的效果记反

原因:L1 产生稀疏解、L2 防止过拟合但不会产生稀疏解,这两个结论在选择题里经常互换选项来迷惑人。第 56 题问「哪些正则项会让不少 coefficient 为 0」,答案是 L0-norm 和 L1-norm,不包括 L2-norm。

解决:记住一个直观理解——L1 的约束区域是菱形,顶点在坐标轴上,所以最优解容易落在顶点处,产生稀疏;L2 的约束区域是圆形,没有尖角,所以解不会恰好落在坐标轴上。第 78 题也考了 L1+L2 同时使用的效果:可以做特征选择并一定程度上防止过拟合。

4.2 现象:混淆 Bagging 和 Boosting 的偏差方差特性

原因:第 40 题(多选)问集成学习中哪些说法正确,答案是 Bagging 降低方差、Boosting 降低偏差。很多人记成反过来。

解决:Bagging 是并行训练多个基分类器然后投票,通过平均来降低方差;Boosting 是串行训练,每一步关注前一步分错的样本,通过逐步减小偏差来提升整体性能。第 23 题考 Bagging 的特点(Bootstrap 采样),第 24 题考 Boosting 的特点(分类器按顺序训练、预测时比重不同),这两题的选项设计就是用来区分这两个概念的。

4.3 现象:K-Means 和 K-NN 搞混

原因:名字里都有 K,但一个是聚类(无监督),一个是分类(监督)。第 84 题问「哪个不是分类模型」,答案是 K 均值;第 28 题问 K-NN 在什么情况下效果好,答案是样本较少但典型性较好。

解决:K-Means 是聚类算法,没有标签,目标是找到 K 个簇;K-NN 是分类算法,有标签,根据最近的 K 个邻居来投票决定类别。第 67 题也考了「哪个是无监督学习算法」,答案是 K-Means 聚类。

4.4 现象:SVM 软间隔参数 C 的方向搞反

原因:第 26 题问 C 很小时会怎样,答案是会发生误分类;第 27 题问 C 趋于无穷时会怎样,答案是只要最佳分类超平面存在就能全部正确分类。C 越大,对误分类的惩罚越大,间隔越窄;C 越小,允许更多误分类,间隔越宽。

解决:把 C 理解为「对错误的容忍度」——C 大 = 不容忍错误 = 硬间隔倾向;C 小 = 容忍错误 = 软间隔倾向。第 22 题问 SVM 欠拟合时怎么改进,答案是增大 C 和增大 gamma,因为欠拟合说明模型太简单,需要增大复杂度。

4.5 现象:神经网络激活函数与梯度消失的关系记不清

原因:第 52 题问哪个激活函数会导致梯度消失,答案是 Tanh;第 55 题问哪个引入了非线性,答案是 ReLU;第 64 题问哪个不能做激活函数,答案是 y=2x(线性函数)。

解决:Sigmoid 和 Tanh 在输入较大或较小时梯度趋近于 0,会导致梯度消失;ReLU 在正区间梯度恒为 1,不会消失,但在负区间梯度为 0,可能导致神经元死亡。第 10 题(简答题)也考了梯度消失的原因和解决方案:用 ReLU 替换 Sigmoid。

5. 从刷题到真懂:用简答题反推知识框架的进阶用法

简答题是这份题库里最容易被低估的部分。很多人觉得简答题就是背答案,但其实简答题的答案里包含了完整的推导逻辑,用好了可以帮你把零散的选择题知识点串成体系。

我的做法是:先不看答案,自己写一遍,然后对照答案找差距。比如第 3 题要求手算 K-Means 的迭代过程,如果你能独立算出来,说明对 K-Means 的理解已经到位了;如果算不出来,说明只是记住了「K-Means 是聚类算法」这个结论,但没掌握具体流程。

再比如第 11 题的卷积层计算,如果你能独立写出公式并算出结果,那 CNN 参数计算这块就没问题了。第 12 题问随机森林为什么比决策树 Bagging 快,答案的关键在于「随机森林只需随机考察一个属性子集」,这个点在选择题第 53 题里也有对应——增加决策树深度可能导致过拟合,但增加树的数量不会。

下面这张表是我整理的简答题与选择题的对应关系,可以用来交叉验证:

简答题对应选择题核心知识点
第 1 题 LDA 分类思想第 12 题类内距离最小、类间距离最大
第 2 题 SVM 对噪声敏感第 16 题支持向量决定决策边界
第 3 题 K-Means 手算第 82 题迭代过程与收敛条件
第 5 题 标准化处理第 9 题、第 71 题树模型不需要归一化
第 9 题 学习率影响第 47 题梯度下降步骤
第 10 题 梯度消失第 52 题Tanh 导致梯度消失
第 11 题 CNN 参数计算第 57 题、第 60 题卷积核与特征图
第 12 题 随机森林速度第 25 题、第 53 题Bagging 与随机森林

最后说一个我自己的习惯:每次复习完一个模块,我会合上题库,拿一张白纸,把这个模块的核心概念、公式、典型算法流程默写一遍。写不出来的地方就是没真正掌握的地方。这份题库的价值不在于题目本身,而在于它能帮你快速定位到那些「以为自己会了但其实不会」的知识点。从那以后我每次复习任何一门课,都强制走一遍「归类 → 做题 → 反查 → 默写」这个流程,比单纯刷题效率高得多。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询