北航机器学习期末复习:题型拆解、推导清单与代码模板
1. 考前先给这门课画张地图北航学院路机器学习期末的考察格局考前的第一件事不是打开西瓜书从第一章开始啃而是先搞清楚这门课在计算机学院的培养方案里到底占什么位置、期末想考察你什么。我当年吃过这个亏用整整一周把线性模型、SVM、聚类从头推了一遍结果考完才发现最重的代码题考的是数据处理流程差点没写完。所以如果你现在才开始复习别慌但真得先停下来做个战略判断。1.1 题型构成与分数权重先看分敢花在哪北航学院路这边的机器学习课程期末通常是以“概念题 计算推导题 代码/项目题”综合出卷不同年份老师不同比例会有浮动但主流的分数权重我列个参考题型大致分值占比考察重点复习优先级选择题/判断题20%左右概念辨析、算法适用场景、基本结论高简答题15%左右算法优缺点比较、模型选择理由高推导计算题35%左右线性回归、逻辑回归、SVM、PCA、K-means等核心步骤极高代码/实验题30%左右基础库调用、数据处理、模型训练与评估流程极高选择题和判断题看着分值不高但它是“保底分”。这部分的题目往往直接从课程的PPT里挖句子比如“过拟合时应该增大还是减小正则化系数”“PCA是为了解决什么问题”只要你对基本概念有印象就能拿分。真正拉开差距的是推导计算题和代码题这两块合计能占到总分的一半以上决定了你是及格线徘徊还是能冲高分。1.2 教材与课程路线对应的重点章节别平均用力北航学院路的机器学习课程教材主流用的是周志华老师的《机器学习》也就是俗称的西瓜书部分老师会搭配自编讲义和 Andrew Ng 的课程目录做补充。期末范围基本覆盖这些模块模型评估与选择经验误差、过拟合/欠拟合、评估方法留出法、交叉验证、性能度量准确率、精确率、召回率、F1、ROC曲线与AUC。这部分是选择题和简答题的高频来源。线性模型线性回归、对数几率回归逻辑回归、线性判别分析LDA。计算题的常客。决策树信息增益、增益率、基尼指数ID3/C4.5/CART的对比。神经网络M-P神经元、感知机、BP算法、过拟合处理。支持向量机间隔最大化、对偶问题、核函数、软间隔。推导题的深度来源。聚类K-means、层次聚类、DBSCAN性能度量。降维与度量学习PCA主成分分析矩阵分解的基本逻辑。集成学习Boosting、Bagging、随机森林、多样性增强。概率图模型/贝叶斯分类器朴素贝叶斯、贝叶斯网络的基础概念部分年份会考看老师强调过没有。需要说明的是每届老师都可能删减或增补内容比如有的年份会科普讲一点深度学习和模型的噪声数据处理有的会提一嘴量子机器学习的概念性内容这些地方往往只会进选择题。所以复习之前最靠谱的动作是把最后一节课的PPT和老师在群里划的范围找出来对着目录打勾。平均用力的复习方式在期末这种时间紧张的情况下基本等于送分给别人。2. 从看懂到会算高频计算题的推导突击清单概念可以靠浏览计算题必须靠手推。这是我跟好几个高分同学交流后达成的一致结论计算题如果不亲手在纸上推五遍以上考场上连思路都可能断掉。因为考试不是让你套公式而是要求你在不全给公式的前提下完成关键步骤。2.1 先搞懂“损失函数为什么长这样”而不是背公式很多人复习线性回归一上来就背 \(J(\theta)\frac{1}{2m}\sum_{i1}^m(h(x^{(i)})-y^{(i)})^2\)但考试一旦问你“为什么用平方误差”“梯度下降更新公式怎么来的”你就卡壳了。实际考场上老师常考的不是最后那步更新公式本身而是“从最小二乘到梯度下降”的整条推导链。我推荐按这条链路去理解线性回归假设输出与输入是线性关系\(h(x)\theta^Tx\)我们希望预测值与真实值的差尽量小用平方误差衡量再乘 \(1/2\) 是为了求导后系数整洁对 \(J(\theta)\) 求梯度得到 \(\frac{\partial J}{\partial \theta_j} \frac{1}{m}\sum_{i1}^m(h(x^{(i)})-y^{(i)})x_j^{(i)}\)梯度下降更新\(\theta_j : \theta_j - \alpha \frac{\partial J}{\partial \theta_j}\)这个链条你能自己推出来处理“给定几个样本求一次梯度更新后的参数”这种经典题目时就只是套步骤的体力活。关键是每一步都要知道为什么为什么要对偏置项单独处理为什么特征缩放影响收敛速度后一问经常作为问答题藏在计算题里。2.2 三个必考的推导链条我按重要程度排个序第一是逻辑回归。它比线性回归更常考因为牵扯到 sigmoid 函数和对数似然。考试套路一般是写出假设函数 \(h(x)g(\theta^Tx)\)写损失函数交叉熵/对数似然的负值求梯度然后给几个数据点让你算一步或两步更新。这里的坑有两个一是求导时容易丢掉负号二是需要凑出 \((h(x^{(i)})-y^{(i)})x_j^{(i)}\) 这种形式考场上一旦写完梯度形式后面的数值计算就不慌了。第二是PCA。北航这边很爱考PCA的步骤题给定协方差矩阵或给定样本矩阵求特征值、特征向量、主成分、降维后样本。必须熟练的是数据中心化 → 计算协方差矩阵 → 求特征值和特征向量 → 按特征值大小排序取前k个 → 用 \(W^Tx\) 投影。往年会在这道题里埋两个小问一是“为什么先要中心化”二是“特征值大小代表什么意义”这两个概念题不提前准备临场很难答全。第三是朴素贝叶斯。特征条件独立假设、先验概率、后验概率计算落到计算题上通常是给一张训练数据表让你预测某个新样本的类别。做这道题时会有一个细节如果某个特征在某个类别下的条件概率为0要不要做拉普拉斯平滑很多同学知道平滑这件事但不知道考试里什么时候用。只要题目里出现“某个条件次数为0”或者“测试样本包含未见过的特征取值”就必须用拉普拉斯平滑分子加1分母加类别数或该特征的取值类别数。这个小细节大约值5到8分属于典型的“会者不难”。2.3 计算题的考场速算技巧计算题不是只有推导数值计算也很重要。我每次考试前都会把几个常用数值写在草稿纸上提前热身sigmoid 函数在 0、1、-1、2 这些点的近似值\(\ln2\)、\(\ln3\) 的近似值常见的 \(e^{-1}\) 这种。因为期末考场不能用计算器有的考场允许但规定不同提前记住这些值能省下大量时间更重要的是能用来粗略检查计算结果靠不靠谱。另外强烈建议复习时找个研友互相出题。不是说一套卷子大家轮流做而是一个人负责出“只写题干”另一个人在白纸上完整走一遍流程然后交换批改。我亲测这种互动方式比单独刷题高效很多因为给别人讲推导时你才会意识到自己哪一步只是“背过了”而不是“真懂了”。比如有一次别人问我“AUC为什么等于ROC曲线下方的面积”我一开始答得模棱两可后来反反复复想明白其中的排序含义这个概念从那时起再也不会忘。3. 参考资源怎么配比西瓜书、吴恩达课程与自编讲义的三层用法复习到最后一周绝大多数人桌上都摆着至少三份材料周志华的西瓜书、吴恩达的机器学习课程笔记、老师发的PPT和实验指导书。问题从来不是没有资料而是资料太多不知道哪个阶段该用哪个。我把自己复习踩出来的资源配比方法分享给你。3.1 三份材料的定位差异别拿西瓜书当PPT看老师自编讲义/PPT 是最贴近考题的材料。课堂上强调过的例子、画过的图、提过的小结论都可能变着法子出现在选择题里。所以第一优先级永远是老师的PPT复习的第一步是把每一章PPT里的“黑体字结论”过一遍比如“岭回归是L2正则化”“Lasso是L1正则化能产生稀疏解”这些直接从课件里抠出来的句子。西瓜书的价值在于深度理解。它的推导完整但阅读门槛高适合用在计算题专项突破阶段当你拿着PPT推导逻辑回归梯度时发现看不懂某一步就去西瓜书第三章找对应的完整推导。一个常见误区是“精读西瓜书”一页页往下啃这绝对不适合期末冲刺。我见过好几个新生把西瓜书从第一章通读到第十章花了两周最后发现还是不会做题——因为读书的理解和考试的复现完全是两回事。吴恩达课程笔记则更像“导读材料”。它当年是英文授课中文笔记在市面上流通很广适合用来查缺补漏。比如巴拿马衰减、学习率的选择、特征缩放这些偏实践的知识点吴恩达讲得比西瓜书更直观。如果复习时间只剩三五天建议把吴恩达笔记中的“梯度下降”“逻辑回归”“正则化”“神经网络”几章快速过一遍把里面的练习例题当作辅助。3.2 以题带学的高效刷题法把任务拆成三个晚上我不会直接推荐你去刷整本习题集因为期末常考的就那几种题型整本刷完太浪费时间。最实用的是“以题带学”的流程我自己把它拆成三个晚上落地第一个晚上拿着PPT把每一章的“课后思考题”快速口头作答。答不上来的标记一下不细想目标是筛出盲区。第二个晚上针对盲区去西瓜书和吴恩达笔记里找对应的推导段落只看公式推导和结论不看多余的文字。第三个晚上把近几年真题或老师发的复习题里所有计算题全部手写一遍写完再对照答案逐步骤检查重点看数值算错和符号丢漏。这个流程适合一次性覆盖所有知识点而且能让你的时间投入和分值回报率成正比。还有一个容易被忽略的点往年题里出现过的同一个变形题今年大概率还会出现只是换了数据。比如去年的K-means手算题给了5个点今年可能给8个点但流程完全一样。所以往年题不能只“看”最好在纸上把每一步的中间结果都写完整。4. 实验报告与代码题临时抱佛脚的抓手代码题在期末里的占比不低考前很多同学会焦虑“要不要把整个实验项目的代码背下来”。我的建议是别背代码背套路。北航学院路的机器学习实验通常集中在数据处理、模型训练和评估这一个主流程上代码题考的无非是你在实验里已经做过的事情。只要把套路搞清楚给什么数据都能套上去。4.1 代码类题目的常见考察姿势三种最容易中招第一种是补全代码题目给出一段有洞的程序骨架让你把缺失的函数调用或参数填上。这类题考的是API熟悉度比如model.fit(X_train, y_train)、train_test_split、StandardScaler的用法复习时把课程实验代码里的常用函数过一遍就能应付。第二种是描述输出题目给你一段代码要求写出运行结果或解释每行代码的作用。这里需要留意sklearn里一些默认参数比如RandomState固定随机种子到底是干什么的正则化系数C是越大越强还是越小越强注意在 sklearn 的逻辑回归里C是正则化强度的倒数这个和PPT里的 \(\lambda\) 方向相反容易踩坑。第三种是设计流程不给代码让你用文字或伪码写出完整流程比如“给你一份含缺失值和异常值的数据请设计一个机器学习应用流程预测用户是否流失”。这种题考的是你对标准流水线的把握数据清洗 → 缺失值处理 → 特征缩放 → 划分训练测试集 → 模型选择 → 交叉验证 → 指标评估。题目里如果出现“噪声数据”你还要额外提一句采用去噪/滤波或鲁棒模型来处理。4.2 一个足够通用的sklearn/numpy模板当作保底答案下面这个模板几乎能覆盖所有常规代码题的答题思路# 1. 导入工具库 import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # 2. 加载数据处理缺失值 # 常规做法数值列用均值/中位数填充类别列用众数填充 data pd.read_csv(data.csv) data data.fillna(data.median()) # 3. 划分特征和标签再划分训练集/测试集 X data.drop(label, axis1) y data[label] X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42, stratifyy ) # 4. 特征缩放关键步骤先fit再transform避免数据泄露 scaler StandardScaler() X_train_scaled scaler.fit_transform(X_train) X_test_scaled scaler.transform(X_test) # 5. 建模、训练、预测、评估 model LogisticRegression(C1.0, max_iter1000) model.fit(X_train_scaled, y_train) y_pred model.predict(X_test_scaled) print(Accuracy:, accuracy_score(y_test, y_pred)) print(Precision:, precision_score(y_test, y_pred)) print(Recall:, recall_score(y_test, y_pred)) print(F1:, f1_score(y_test, y_pred))这个模板有三个细节必须在考场上写明白一是train_test_split里设置random_state是为了实验结果可复现二是特征缩放一定要在划分训练集之后做并且用训练集的统计量去转换测试集不能全量数据一起缩放否则会有数据泄露三是评估分类问题不能只看准确率当类别不平衡时要以精确率、召回率和F1为主。老师批卷时最喜欢看你主动讨论这些“为什么”一个优秀的流程设计比满屏代码更显水平。4.3 实验室代码复现的取舍不必逐行背很多同学到最后两天会想把自己写的实验报告全部背下来这并不划算。你只需要背住三个东西项目目录结构、每段核心代码的作用注释、每个模型的评估表格怎么解读。更聪明的方法是把实验报告翻到“结论”和“问题分析”两节把里面提到的坑和解决方案记牢。代码题常让你“解释实验里的某个现象”比如“为什么SVM在噪声较多时效果差”“为什么正则化系数变大后训练准确率下降”。这些其实就是实验报告里讨论过的问题多花时间在讨论部分比背代码收益高得多。如果你选的课有额外的项目任务比如用机器学习检测某种异常行为或做图像分类结题报告里的模型对比图混淆矩阵、ROC曲线也建议重新熟悉一遍。期末简答题有概率让你“结合项目说明评估指标的选择理由”这时候你把项目里的实际做法和图表结果复述一遍阅卷老师会很有代入感。5. 考场上的失分陷阱与应对清单考前准备得再充分上了考场还是会遇到各种意外。我把过去几年大家集中丢分的几个场景列出来这些不是知识问题完全是答题策略问题。注意这些细节至少能白捡5到10分。5.1 概念题易混点噪声数据、过拟合、偏差方差换损伤选择题最爱考的一组概念是噪声数据、过拟合、欠拟合、偏差和方差之间的关系。比如题目说“模型在训练集上表现很好但在测试集上表现很差最可能的原因是”答案是过拟合。但换个问法“如果训练数据本身包含大量噪声会导致什么问题”很多人第一反应还是过拟合这就不准确了——噪声数据会影响模型对真实规律的拟合增加泛化误差但不一定表现为训练集好测试集差更准确的说法是它让模型学到的规律受到干扰。再比如“高方差对应什么状态”“高偏差对应什么状态”这两句话也能出判断题。高方差往往和过拟合挂钩高偏差往往和欠拟合挂钩但别忘了高方差也可能出现在模型对噪声太敏感时。考前把这些概念沿着“定义—表现—解决方法”三个维度各写一遍效率非常高。5.2 简答题里“所答非所问”尤其是让你“比较”的时候桌子上一道题要求“比较K-means和DBSCAN”很多同学咔咔把两个算法分别默写一遍各自有什么优缺点最后没得几分。原因是你没答“比较”的核心它们的差异点。正确思路是先明确比较维度再从维度上对照。可以按下面这种表格回答比较维度K-meansDBSCAN簇形状假设适合凸形簇可以识别任意形状簇簇数量K需要预先指定不需要噪声处理对噪声点敏感会把噪声归入最近簇能识别噪声点标记为离群点参数K、初始中心eps、MinPts高维数据需要预处理/降维距离度量在高维下效果变差这样写阅卷老师一目了然。凡是出现“比较”“分析”“为什么”的简答题一定不能只罗列知识点要把对比关系、因果关系明明白白地写出来。5.3 判断题与多选题的排除法把结论当成工具用判断题里凡是出现“一定”“必须”“所有”“任何”这些绝对化表述的选项大概率是错的。这不是玄学因为机器学习里很少有普遍成立的绝对结论。比如“降维算法一定会损失信息”就是错的PCA按主成分保留时会有取舍但非线性降维有可能保持主要结构“增加训练数据一定减少过拟合”也不严谨要看数据分布是否与测试集一致。多选题的应对策略是“每选一个都要在心里问一句换一个数据集它还对吗”比如“下列哪些方法可以缓解过拟合”候选选项有“增大正则化系数”“增加训练数据”“减少模型复杂度”“增加模型深度”。前三个都是对的第四个就很可疑。这种组合型考点其实就是同一个知识点的三四种表达变体考前把“过拟合的解决方案有哪些”抄在一张纸的角落考场上直接扫一眼就能定答案。5.4 考场时间分配我的个人惯例供参考我自己习惯的时间分配是拿到卷子先快速浏览全卷用5分钟判断哪道大题最耗时间然后选择题和判断题控制在25分钟内一次过不犹豫简答题每个写8到10分钟推导计算题每道留足20分钟最后剩余45分钟以上给代码题。代码题通常是分值最大、文字量也最大的题目如果时间不够即使思路清晰也可能写不完整所以一定要保证它有最充裕的时间。另外考场上如果某道推导题卡住千万别死磕超过10分钟。先把能写的公式写上去比如“损失函数定义为……”“梯度更新公式为……”这些步骤分能拿就拿。我见过太多人卡在第一步的符号化简上结果后面整道大题空白。推导题是按步骤给分的写上关键步骤老师很难给你全扣。写在最后的一点个人体会每次期末复习机器学习我都觉得这课最难的其实不是某个算法本身而是知识点之间的连接太密集线性模型连着正则化正则化连着模型评估模型评估又连着数据预处理。复习时千万不要把它们割裂开一个“机器学习应用流程”从头到尾能串起来才算真正到位。我自己的做法是把一张A4纸横过来从数据采集、预处理、特征工程到模型选择、训练调参、评估部署把课程涉及的所有算法挂在流程的对应环节旁边考前对着这张图讲一遍给自己听。你能完整讲下来期末大概率稳了。