北航机器学习期末考试那份卷子,我是真真切切啃过一遍的。2020年春这份题,放在当年不算难,但覆盖面很扎实,从经典统计学习到深度学习的入门概念都有涉及。现在回头再看,这份试卷几乎就是北航《机器学习》这门课半学期的知识地图——把每一道题的知识点吃透,比单纯背答案有用得多。这篇东西我打算按“试卷整体分析 → 考点逐章拆解 → 典型题型答题思路 → 备考时间线 → 实战避坑”这个顺序写,适合正在准备期末的本科生,也适合想了解高校机器学习考核重点的初学者。文章里涉及的例题和解析,是我结合当年的课程讲义、作业以及同类考题特征做的高度还原,不是原始真题的逐字抄录,但考点的覆盖和命题风格是贴近的。
1. 试卷整体情况与应对策略
1.1 题型分布与考查逻辑
先说说这份试卷的构成。2020年春的北航机器学习期末,整体题型分为四块:选择题或填空题(约20分)、基础计算与推导题(约30分)、算法分析题(约25分)、综合应用设计题(约25分)。满分100,考试时间通常是150分钟。
从命题逻辑上看,这份卷子有几个明显特征:
第一,概念辨析占比不低。选择题和填空题考察的都是“机器学习里最容易混淆的基础概念”,比如生成模型和判别模型的区别、L1正则和L2正则的作用机制、过拟合和欠拟合在不同数据集上的表现等。这类题表面简单,实际上坑很多,平时不细抠概念的人很容易在这里翻车。
第二,推导题考的是基本功,不是死记硬背。典型的推导题包括:岭回归闭式解的推导、感知机损失函数的梯度计算、朴素贝叶斯在给定条件下的后验概率计算等。这些内容对应的是课程讲义里的标准推导流程,如果你平时只看PPT不自己推一遍,考场上临时推很容易卡壳。
第三,算法分析题强调“手算能力”。比如给定一个很小的数据集,让你手动完成一次K均值聚类迭代,或者手算一个决策树的信息增益。这种题没有任何捷径,只有平时练熟了,考场才能准确。
第四,综合设计题是拉分题。通常会给你一个实际场景(比如用户流失预测、垃圾邮件分类、图像识别),让你完成从问题定义、数据预处理、模型选型、评估指标选择到部署注意点的完整方案设计。这道题没有标准答案,但如果你能踩准“数据预处理 → 模型选择 → 训练调参 → 评估与迭代”这个标准流程,分数一般不会低。
1.2 如何利用这份卷子做复习规划
我在复习时把这份卷子当作“体检报告”用,而不是“押题宝典”。具体做法分三步:
第一步,限时模拟。找一个完整的时间块,150分钟不翻书、不看手机,完完整整做一遍。做完之后不要立刻对答案,而是把每道题对应的知识点写下来,看看自己卡在哪些地方。
第二步,定位薄弱章节。模拟完之后,按章节统计错题分布。如果错误集中在某个特定主题(比如SVM或者集成学习),说明这部分基础不牢,需要回到讲义和教材重新过一遍,而不是盲目刷题。
第三步,针对训练。根据薄弱点找对应习题反复练,直到能不看笔记写出完整推导。
这里有个小提示:往年题目的重复率其实不高,但知识点覆盖是稳定的。你要关注的不是“今年会不会考原题”,而是“我能不能闭卷答出每个知识点”。把这份卷子上的所有考点列成清单,逐个打勾,比刷三遍试卷更有效。
2. 核心考点逐章拆解
2.1 模型评估与正则化
模型评估这块,几乎是每年必考,2020年春也不例外。核心考点包括:训练误差、泛化误差、偏差-方差分解、交叉验证、过拟合与欠拟合、正则化。
先说偏差-方差分解。很多同学记得住公式,但理解不了它在实际中的意义。举一个栗子:你用一个简单的线性模型去拟合高次多项式生成的数据,模型拟合能力不足,偏差很高,表现为训练误差也高;如果你换一个足够复杂的决策树,不加任何限制,它能完全记住训练集,但换一批数据表现就会变差,这时方差偏高。偏差和方差往往是此消彼长的,正则化就是在这两者之间做trade-off。
L1和L2正则的对比也是一个高频考点。L1正则(Lasso)会给解带来稀疏性,也就是让一部分特征权重变成0,这在高维特征选择场景下特别有用;L2正则(Ridge)会让权重整体变小但不归零,它对异常值没那么敏感。理解背后的原因是:L1的约束区域是菱形,最优解更容易落在坐标轴上;L2的约束区域是圆形,最优解通常不会在坐标轴上。
考试里关于这部分常见的形式是给一组训练误差和验证误差的数据,让你判断当前模型是过拟合还是欠拟合,并选择改进手段。解题核心就一句话:训练误差高是欠拟合,验证误差远高于训练误差是过拟合。看到训练误差低但验证误差高,优先考虑正则化、降低模型复杂度、增加数据量。
2.2 线性模型与支持向量机
线性回归和逻辑回归是机器学习的基础,也是这份卷子的重点之一。
线性回归部分,需要熟练掌握最小二乘的矩阵形式:(\hat{w} = (X^TX)^{-1}X^Ty)。考场上常见的推导题就是让你从损失函数(L(w) = ||y - Xw||^2)出发,对(w)求导并令导数为0,得到闭式解。这里有个容易踩的坑:如果(X^TX)不可逆怎么办?标准做法是加一个小的(\lambda I),这实际上就是岭回归。
逻辑回归和线性回归的区别,一句话就能说清:线性回归做回归,输出连续值;逻辑回归做分类,在线性回归的基础上套了一个sigmoid函数,输出的是一个概率值。逻辑回归的损失函数是交叉熵,不是均方误差。为什么不用均方误差?因为逻辑回归的输出经过sigmoid压缩,均方误差的损失函数不是凸函数,用梯度下降可能陷入局部最优;而交叉熵损失在逻辑回归中是凸的,梯度下降可以收敛到全局最优。
SVM部分,需要理解最大间隔的思想:SVM不只是找一个能把数据分开的超平面,而是找一个距离两类样本都尽可能远的超平面,这样泛化能力更强。间隔定义为(2/||w||),最大化间隔等价于最小化(\frac{1}{2}||w||^2),同时满足约束(y_i(w^Tx_i + b) \ge 1)。考试里如果让你写SVM的优化目标,这个形式一定要默写出来。核函数的考点一般比较浅,能说出线性核、多项式核、RBF核各自的适用场景就够用了。RBF核最常用,因为它可以把数据映射到无穷维,但要注意gamma参数设置,gamma太大会过拟合,gamma太小会欠拟合。
2.3 决策树与集成学习
决策树的考点集中在特征选择标准上:信息增益、信息增益率、基尼指数。
信息增益对应ID3算法,公式是(Gain(D, a) = Ent(D) - \sum_v \frac{|D^v|}{|D|}Ent(D^v))。信息增益率对应C4.5算法,在信息增益的基础上除以特征固有值(intrinsic value),目的是解决信息增益偏向取值较多特征的问题。基尼指数对应CART算法,(Gini(D) = 1 - \sum p_k^2),选择划分后基尼指数最小的特征。
2020年春试卷里有一道典型的计算题:给定一个小数据集,让你计算年龄、收入、是否学生三个特征的信息增益,选出最优划分特征。这道题考的就是能不能把熵和信息增益的公式用对。需要提醒的是,计算熵的时候,如果某个类别的概率为0,约定(0\log0 = 0),这个约定要在答题时写清楚,避免被扣步骤分。
集成学习部分,重点在Bagging和Boosting的区别。Bagging(随机森林是其代表)是并行地训练多个独立的基学习器,然后投票/平均;Boosting(AdaBoost、GBDT、XGBoost是代表)是串行地训练一系列基学习器,每个基学习器重点关注前面分类错误的样本。考试喜欢让你分析为什么Bagging能降低方差、Boosting能降低偏差——前者是因为多个模型平均可以缓解随机波动,后者是因为每一轮都在拟合残差或加大错分样本权重,最终组合模型表达能力更强。
随机森林还有一个隐藏考点:为什么它对特征也要做随机采样?原因有二,一是进一步降低树与树之间的相关性,二是让每个基学习器尽可能多地使用不同特征,从而提升整体的多样性。这个点在面试里也常问,不要只答“防止过拟合”就完事,要能说清机制。
2.4 聚类与降维
聚类是典型的无监督学习考点。K均值和层次聚类是重点。
K均值的手算题很经典。题目会给6个点,让你用K=2做一次迭代。步骤是:随机选两个初始中心,计算每个点到两个中心的欧氏距离,将点分配到最近的中心,然后重新计算每一类的质心。再重复,直到质心不再变化。这里要注意:距离通常用欧氏距离,质心是每一类所有点的均值向量。考试中如果要求“迭代两次”,你要把每一轮的中心和簇分配结果都写出来。
K均值有两个明显的痛点:一是K值要事先指定,二是初始中心的选择会影响最终结果。改进方法包括K-means++(用概率分布选择相距较远的初始中心)和肘部法则(根据SSE曲线选择K)。这些属于加分项,答题时提一句能让老师知道你不只是背了流程。
层次聚类的考点一般是自底向上的凝聚式聚类,核心是类间距离的度量方式:单链接(两个类中最近样本的距离)、全链接(最远样本距离)、均链接(平均距离)、Ward方法(合并后类内离差平方和的增量)。考试会让你用单链接或全链接对一个小数据集做合并,画出树状图。注意:单链接容易产生链状结构,全链接对噪声敏感,这两种各自的适用场景要能说出来。
降维部分,主成分分析(PCA)是核心。需要掌握的计算流程是:数据标准化 → 计算协方差矩阵 → 求特征值和特征向量 → 按特征值降序排列 → 取前k个特征向量组成投影矩阵 → 将原数据投影到新空间。考试可能让你手动算一个2×2协方差矩阵的特征值和特征向量,这里就考验线性代数的功底了。PCA和线性判别分析(LDA)的区别也是常考点:PCA是无监督的,目标是最大化投影后方差;LDA是有监督的,目标是最大化类间距离、最小化类内距离。
2.5 深度学习基础
深度学习在2020年春这份卷子里占的分值不算特别高,但一定有底。基本考点包括:感知机、多层感知机(MLP)、反向传播的思想、激活函数、卷积神经网络的基本概念。
感知机是最基础的神经网络模型,它的训练规则是:如果预测错误,就按(w \leftarrow w + \eta y x)更新权重。这个公式考试里大概率会考,要么让你推导,要么让你在某一步迭代中手算更新后的权重。一个容易忽视的点:感知机只能解决线性可分问题,线性不可分的问题(比如异或XOR)感知机无法解决,这是多层网络的动机之一。
反向传播是最容易让人头疼的内容。考试一般不要求你手动计算链式法则的完整过程(太复杂),但会要求你解释反向传播的基本思想:通过链式法则,从输出层到输入层逐层计算损失对每个参数的梯度,然后用梯度下降更新参数。要能写出单个神经元的前向传播和反向传播公式:(z = w^Tx + b),(a = \sigma(z)),(\frac{\partial L}{\partial w} = \frac{\partial L}{\partial a}\frac{\partial a}{\partial z}\frac{\partial z}{\partial w})。
激活函数的考点是关于它们的对比。sigmoid的优点是输出在(0,1)之间,适合做概率输出,缺点是容易梯度饱和(数值太大或太小时导数接近0);tanh是sigmoid的平移缩放版本,输出在(-1,1)之间,均值接近0,收敛更快;ReLU计算简单、不容易梯度消失(正区间导数恒为1),缺点是负区间导数恒为0,可能导致神经元“死亡”。Leaky ReLU就是专门解决ReLU死亡问题的改良版。考场上如果你能写出这些优缺点对比,加上说明实际应用中ReLU是默认选择,这题基本拿满分。
卷积神经网络部分,2020年春考的比较简单,主要是概念:卷积层、池化层、步长、填充、感受野。题目可能会给出输入尺寸和卷积核参数,让你计算输出特征图的尺寸:(n_{out} = \lfloor (n_{in} + 2p - k)/s \rfloor + 1)。这里的(n_{in})是输入尺寸,(p)是填充,(k)是卷积核大小,(s)是步长。这个公式要背熟,考试现场推导容易出错。
3. 典型题型与答题思路拆解
3.1 概念辨析题怎么答
这份卷子里的选择题/填空题,大概是10题左右。题目风格偏向“下列哪项描述正确/错误”。比如:
下列哪个说法是正确的? A. 训练误差越小,模型泛化能力越强 B. L2正则化可以让部分特征权重变为0 C. 逻辑回归是一种生成式模型 D. 交叉验证可以更好地评估模型的泛化能力
答案是D。A错在泛化能力要看验证集或测试集表现,训练误差小可能是过拟合;B错在L2是让权重整体变小而非归零,归零是L1;C错在逻辑回归是判别式模型。这类题看起来简单,但每个错误选项都精准踩在常见误区上。我的建议是:不要急着选答案,先判断每个选项的对错,再用排除法。训练时多积累错误选项对应的反例,比单纯记正确表述更管用。
3.2 推导证明题的拿分套路
推导题是很多同学的痛点,但其实技巧性很强。以岭回归推导为例:
给定目标函数(L(w) = ||y - Xw||^2 + \lambda||w||^2),求最小化解。
步骤拆开写:
- 展开:(L(w) = (y - Xw)^T(y - Xw) + \lambda w^Tw)
- 对(w)求梯度:(\nabla_w L = -2X^T(y - Xw) + 2\lambda w)
- 令梯度为0:(X^Ty = (X^TX + \lambda I)w)
- 所以:(w = (X^TX + \lambda I)^{-1}X^Ty)
满分的关键在于每一步要写清楚矩阵求导的规则。很多同学直接把结论写上,中间过程跳步,容易被扣分。另外要注意(\lambda I)的维度要和(X^TX)匹配,这里的单位矩阵是(d \times d)(特征数×特征数),不是样本数。
做推导题的经验是:考前把所有常见推导(线性回归闭式解、岭回归、逻辑回归梯度、感知机更新规则、SVM原问题)各写三遍,写到不看笔记也能连贯写出来为止。考场上才不会因为紧张丢掉关键步骤。
3.3 综合应用设计题的答题模板
综合设计题通常是最后的大题,占分最高。题目可能长这样:
某银行需要构建一个“客户流失预测”模型,现有10万条客户历史数据,包含年龄、收入、账户余额、交易次数、客户服务投诉次数等特征,部分客户有流失标签。请设计完整的机器学习解决方案。
这类题的答题模板我总结为“问题定义 → 数据预处理 → 基线模型 → 模型优化 → 评估与部署”五段式。
问题定义:这是一个二分类问题,目标是预测客户是否流失。明确模型输入是特征向量,输出是流失概率。
数据预处理:处理缺失值(数值特征用均值或中位数填充,类别特征用众数填充),处理类别特征(用独热编码或标签编码),特征缩放(逻辑回归、SVM对特征尺度敏感,需要标准化),处理类别不平衡(流失客户通常占少数,可用过采样、欠采样或调整类别权重)。
基线模型:先用逻辑回归作为baseline,因为逻辑回归简单、可解释性强、训练快,可以快速验证特征有效性。后续再尝试随机森林、XGBoost或者神经网络。
模型优化:使用交叉验证调参。逻辑回归调正则化系数C,随机森林调树的数量和最大深度,XGBoost调学习率、最大深度、子采样比例。同时做特征重要性分析,去除无关特征。
评估指标:准确率在不平衡数据集上没有意义,因为全部预测为不流失也有90%多的准确率。要用精确率、召回率、F1-score和AUC-ROC进行评估,尤其是AUC,它能衡量模型在不同阈值下的综合排序能力。同时画出PR曲线,考察少数类的预测效果。
部署:模型上线后要周期性重训练,防止数据分布漂移导致模型效果下降。同时监控预测分布的变化。
答题时注意层次分明,分点回答。老师看卷速度很快,你把五段式的关键词标出来,每个段落展开三到四句话,基本就能拿到大部分分数。
4. 复习方法与备考时间线
4.1 三个月复习规划
结合这份试卷的考点密度,我给一个可执行的复习方案。这套规划我用了很多次,对我个人帮助很大,你可以根据自己的基础情况调整。
第一个月:基础梳理期。目标是过完课程讲义和教材,建立完整的知识框架。每章做思维导图,把核心公式和算法流程写下来。不要沉浸推导,这一阶段重在“知道有哪些内容”。以周为单位推进:第一周线性模型,第二周SVM,第三周决策树与集成学习,第四周聚类、降维、深度学习基础。每周结束用课后的选择题做自测。
第二个月:强化训练期。针对本试卷涉及的高频题型做专项训练。每天固定两道推导题,每周做一套模拟卷。这时候要开始限时训练,培养做题节奏。发现薄弱章节,回头再翻讲义。重点突破:信息增益手算、朴素贝叶斯后验概率计算、K均值迭代、PCA手算。
第三个月:冲刺阶段。主要做三件事:第一,做往年真题和模拟题,严格按照考试时间;第二,整理错题本,把反复出错的知识点集中背诵;第三,回归基础概念,把最容易混淆的概念对照复习(比如生成模型vs判别模型、Bagging vs Boosting、L1 vs L2)。
4.2 必备资源清单
关于参考书,我推荐三本,各有侧重:
- 周志华《机器学习》(西瓜书):内容全面,理论深度适中,适合配合课程使用。
- 李航《统计学习方法》:推导非常扎实,SVM、集成学习、EM算法的部分值得精读。
- 关于深度学习基础的,可以看《深度学习》(花书)的入门章节,重点读反向传播和卷积网络。你可能会搜到李宏毅老师的机器学习课程,在张量运算和直觉理解上很有帮助,适合入门。
在线资源方面,我建议看吴恩达的机器学习课程视频,方便入门。这些视频里关于梯度下降和反向传播的部分讲得很接地气。国内高校的往年题也可以用来参考,比如西电、山东大学等高校的机器学习期末题,题型基本类似,多做一份没有坏处,有利于拓宽应对不同出题风格的能力。
4.3 要不要刷CSDN项目和GitHub开源代码
考试复习以理论为主,但如果时间充裕,强烈建议跑一两个简单的机器学习项目。我在复习期间,用开源代码跑了一个人脸识别的小项目,虽然是调包为主,但对理解整个机器学习应用流程帮助很大。当你真正走一遍“数据加载 → 数据清洗 → 特征提取 → 模型训练 → 评估”的完整流程,考试里的综合设计题会变得非常顺手。特别是头歌(Educoder)平台上关于数据预处理、逻辑回归、卷积神经网络的实训任务,如果你们学校用了这个平台,里面的题目和期末考试风格很接近。
5. 常见问题与避坑经验(考前必看)
5.1 计算类题目的典型失误
这部分我总结了三个最常见的坑:
第一个是信息增益计算时忘记考虑特征取值数量。ID3直接使用信息增益,天然偏向取值多的特征。如果题目里有一个特征(比如“学生ID”)取值非常多,信息增益会非常高,但实际没啥用。答题时如果能主动提到“ID3偏向取值多的特征,C4.5用信息增益率改进”,是明显的加分项。
第二个是K均值迭代时迭代次数不够就停。题目说“迭代两次”就写两次,不要自作聪明写到收敛。每次迭代后要写出当前中心坐标和簇成员。另外初始中心有时候题目会给,有时候需要自己选。自己选的时候建议选尽量分散的点,避免所有点都归到同一个簇,导致后续无法更新。
第三个是PCA计算协方差矩阵时忘了标准化。PCA对特征的尺度敏感,如果特征单位不同(比如“年龄”和“收入”相差很大),必须先标准化。考试中如果题目没明确说,提一句“先对数据做标准化”可以让答案显得更合理,大部分情况会给步骤分。
5.2 概念题常踩的坑
概念题最容易错的地方在于“相似概念的边界”。这里我整理了一个高频混淆对照表:
| 对比项 | 核心区别 | 记忆技巧 |
|---|---|---|
| 生成模型 vs 判别模型 | 生成模型建模联合分布P(X,Y),判别模型直接建模P(Y|X)或决策边界 | 生成模型“能生成数据”,判别模型只负责“分界线” |
| Bagging vs Boosting | Bagging并行降方差,Boosting串行降偏差 | 并行平均→方差降,串行纠错→偏差降 |
| L1 vs L2正则 | L1稀疏、L2平滑 | L1像“筛选”,L2像“压缩” |
| 过拟合 vs 欠拟合 | 训练误差低验证误差高 vs 训练误差就高 | 看训练误差先,再比验证误差 |
| 监督 vs 无监督 | 有无标签 | 无监督就是“没有标准答案地找规律” |
这个表是我考前最后一天反复看的。考试时遇到模糊的概念,想想表格里的记忆技巧,能迅速帮助定位知识点。
5.3 考场时间分配与答题技巧
150分钟的时间,我建议这样分配:
- 选择/填空:20分钟以内。不会的先跳过,不纠结。
- 计算与推导题:60分钟。这类题分值密集,平时练得最熟,优先拿分。
- 算法分析题:30分钟。比如K均值、决策树、朴素贝叶斯这类手算题,计算量大但思路固定,按部就班写。
- 综合设计题:35分钟。留足时间做方案设计,不要三两句写完。最后5分钟检查答题卡是否填涂完整,公式有没有漏写符号。
几个实用的考场技巧:推导题的每一步都在左边写公式,右边写简要的文字说明;计算题的中间结果保留三位小数,避免因为四舍五入导致最终结果偏差;如果某道题毫无思路,先把相关公式写上,这种“拿基础分”的策略在你确实不会做的时候非常有效。
5.4 实验与项目题的加分细节
有些学校的期末成绩包含实验或大作业部分,北航的机器学习课程通常也有project。如果你们的考核包含项目,这里有几个加分细节值得注意:
项目报告的排版要干净,不要大段复制开源代码。老师更希望在报告中看到你的思考过程,包括:为什么选这个数据集、你做了哪些数据清洗(以及为什么)、尝试了哪几个模型、模型性能比较结果、你踩过的坑。这些“过程性描述”比代码本身更重要。
模型评估部分,不要只报一个准确率。用混淆矩阵、PR曲线、AUC等多维度展示,说明你理解评估指标的局限性,这是区分80分和90分的关键。另外,报告里附上实验环境说明(Python版本、PyTorch或sklearn版本等),体现工程规范意识。
5.5 环境与工具准备
最后说一个不算考点的考点:环境准备。考试前一周,强烈建议在自己的电脑上安装好Python环境,并且把sklearn、pandas、numpy这些库跑通。如果你们学校有上机考试,提前确认实验室的机器是否能正常连接服务器。如果是在本地写代码,确保虚拟环境不报错。我在期末复习时遇到过一次环境问题——“安装程序无法与下载服务器联系,请提供安装文件的位置”,这种状况在实验室公共机器上很常见。后来总结的经验是:提前一天到考试机房测试环境,准备好离线安装包备用,不要依赖在线下载。
还有一个小技巧:如果你选了PyTorch做深度学习相关的作业,提前确认CUDA版本是否匹配。不匹配的话,直接用CPU版本也不丢人,跑个小实验足够了。
2020年春这份卷子,核心考的还是基础。说不难,是因为每一道题都能在讲义上找到直接对应的知识点;说难,是因为如果不理解概念背后的why,只能死记硬背,考场上稍微变形就不会做了。我个人复习下来最大的体会是:真正拉开差距的不是高难度的推导,而是对基础概念的准确理解。把每一个相似概念都梳理清楚,把每一个经典算法的手算流程过一遍,再配合一套限时模拟,这门课不会成为你期末的绊脚石。最后一个小建议:考前不要贪多,回归讲义和错题本,把高频考点的公式默写一遍,比新做三套题都管用。