机器学习作业复习指南:从知识地图到查漏补缺的完整路径
发布时间:2026/10/31 4:28:42 锦皓数字建站

简介这份资源面向正在学习或复习吴恩达机器学习课程的学习者尤其适合需要对照编程作业动手实践、又希望有中文笔记辅助理解的同学。包内包含课后编程作业的无答案版与有答案版有答案版又细分三版并附作业题目合并版PDF可直接打印同时收录课堂讲义PDF与中文个人笔记覆盖线性回归、逻辑回归、K-means图像压缩、人脸数据PCA等经典实验场景。资源共1028个文件以m脚本、txt说明、mat数据、ipynb笔记本、pdf讲义与笔记为主另有少量py脚本和png图示压缩包约202.33MB目录按作业与讲义模块组织便于按章节检索。已有2537人学习下载适合希望边看讲义边跑代码、借助多版本答案自查与对比的学习者也能为课程复习和实验排错提供较完整的参考材料。1. 机器学习作业复习从知识地图到查漏补缺的完整路径很多人复习机器学习时第一反应是翻讲义、背公式结果合上书脑子里还是一团散沙。真正卡住复习进度的往往不是某个算法本身而是不知道这些算法在整门课里各自站在什么位置。这份作业资源把课程练习拆成「无答案」和「有答案」两版再配上一份个人笔记恰好构成一条从动手到对照再到归纳的闭环。它适合已经过了一遍课程、想系统梳理知识框架的人也适合正在备考、需要快速定位薄弱模块的人。整门课的主线其实很清晰监督学习打底神经网络承接再往上走模型评估与优化最后落到无监督学习和推荐系统。把这条线画出来后面的复习才有地方挂。2. 监督学习模块线性回归与逻辑回归的复习重点监督学习是整门课的地基作业里占比也最大。梳理下来会发现线性回归和逻辑回归看似两个算法底层却是同一套「假设函数 代价函数 梯度下降」的骨架只是输出层换了激活函数、代价函数换了形式。复习时如果能把这两者的对应关系理清后面神经网络的推导会顺很多。2.1 线性回归从单变量到多变量的参数对齐线性回归的作业通常从单变量开始再扩展到多变量。单变量时假设函数是 $h_\theta(x) \theta_0 \theta_1 x$多变量时变成向量形式 $h_\theta(x) \theta^T x$注意这里默认补了一列 $x_0 1$。很多人在多变量作业里翻车就是因为忘了特征归一化导致梯度下降收敛极慢甚至发散。代价函数统一是均方误差$$ J(\theta) \frac{1}{2m}\sum_{i1}^{m}(h_\theta(x^{(i)}) - y^{(i)})^2 $$梯度下降的更新规则对每个参数 $j$ 同步执行# 线性回归梯度下降核心更新theta 需同步更新 for j in range(n_features): # 对第 j 个参数求偏导累加所有样本的误差项 gradient (1 / m) * np.sum((X theta - y) * X[:, j]) theta[j] theta[j] - alpha * gradient # alpha 为学习率这段代码的关键在于X theta - y是所有样本的预测误差向量再逐列与特征相乘求和。参数alpha是学习率作业里常要求尝试不同取值观察代价曲线m是样本数n_features是特征数。失败时先看代价是否单调下降若不降多半是学习率过大或忘了归一化。提示多变量作业里特征归一化均值归一化或 Z-score几乎是必做步骤跳过它梯度下降的收敛速度会让你怀疑人生。2.2 逻辑回归激活函数与代价函数的替换点逻辑回归的假设函数在线性组合外再套一个 sigmoid$$ h_\theta(x) g(\theta^T x) \frac{1}{1 e^{-\theta^T x}} $$代价函数不能再用均方误差否则会变成非凸函数梯度下降容易陷在局部极小。作业里用的是交叉熵形式$$ J(\theta) -\frac{1}{m}\sum_{i1}^{m}\left[y^{(i)}\log h_\theta(x^{(i)}) (1-y^{(i)})\log(1-h_\theta(x^{(i)}))\right] $$梯度更新公式形式上与线性回归一模一样都是 $\theta_j : \theta_j - \alpha \frac{1}{m}\sum (h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)}$但这里的 $h_\theta$ 已经是 sigmoid 输出。这个「形式相同、内涵不同」的点是复习时最容易混淆的地方建议在笔记里单独标出来。正则化是逻辑回归作业的另一个重点。正则项只加在参数上、不加在偏置项 $\theta_0$ 上这一点在向量化实现时要用theta[1:]切片处理漏掉就会导致正则化过度、模型欠拟合。2.3 正则化为什么偏置项不参与惩罚正则化的目的是抑制过拟合代价函数在原有基础上加 $\frac{\lambda}{2m}\sum_{j1}^{n}\theta_j^2$。作业里反复强调 $\theta_0$ 不参与正则化原因是偏置项只控制整体平移惩罚它没有抑制模型复杂度的意义。向量化实现时常见写法# 正则化梯度theta[0] 不参与惩罚 reg (lambda_ / m) * theta reg[0] 0 # 偏置项梯度不加重正则项 gradient (1 / m) * (X.T (X theta - y)) reglambda_是正则化强度作业里常要求画学习曲线观察 $\lambda$ 过大过小的表现过大导致欠拟合、代价居高不下过小则过拟合、训练集代价很低但验证集很高。这个「两头看」的调试习惯比记住公式本身更有用。3. 神经网络模块前向传播与反向传播的推导要点神经网络是课程里跨度最大的一块作业从单层感知机一路推到多层网络和反向传播。复习时不要一上来就啃反向传播的链式法则先把前向传播的维度对齐搞清楚反向传播的公式自然能顺着维度推出来。3.1 前向传播维度对齐是第一道关一个三层网络的参数字典通常长这样Theta1形状是 $(s_2, s_11)$Theta2形状是 $(s_3, s_21)$加 1 是因为每层都补了偏置单元。作业里最常见的错误就是矩阵乘法顺序搞反或者忘了给输入补一列 1。# 三层网络前向传播a1 为输入层已补偏置列 a1 np.insert(X, 0, 1, axis1) # 补偏置单元 z2 a1 Theta1.T # 第一层线性组合 a2 sigmoid(z2) a2 np.insert(a2, 0, 1, axis1) # 隐藏层补偏置 z3 a2 Theta2.T a3 sigmoid(z3) # 输出层预测np.insert的axis1表示按列插入位置 0 即最前面。维度上a1是 $(m, s_11)$Theta1.T是 $(s_11, s_2)$乘完得到 $(m, s_2)$正好对上隐藏层单元数。这个维度链条一旦理清反向传播的梯度形状也能照推。3.2 反向传播误差项的逐层回传反向传播的核心是定义每层的误差项 $\delta$。输出层误差是预测减真实值隐藏层误差由后一层误差乘权重再乘激活函数导数得到$$ \delta^{(l)} (\Theta^{(l)})^T \delta^{(l1)} \odot g(z^{(l)}) $$作业里 sigmoid 的导数可以直接用 $g(z) g(z)(1-g(z))$因为前向传播时已经算过 $g(z)$存下来能省一次计算。梯度则由误差项与激活值外积累加得到。很多人在这里踩坑是因为把 $\delta$ 的维度搞错或者忘了去掉偏置单元对应的那一列。注意反向传播里 $\delta^{(l)}$ 不包含偏置单元所以从后一层回传时要先去掉 $\Theta$ 的第一列再与导数逐元素相乘。3.3 梯度检验数值近似是最后的后悔药反向传播写完后作业几乎都会要求做梯度检验。原理是用双侧差分近似偏导$$ \frac{\partial J}{\partial \theta_i} \approx \frac{J(\theta_i \epsilon) - J(\theta_i - \epsilon)}{2\epsilon} $$把数值梯度和反向传播算出的解析梯度逐项比较相对误差小于 $10^{-7}$ 量级才算通过。这个步骤计算量大只在小规模参数上做正式训练时要关掉。血泪经验是梯度检验不通过就别急着调参先回去查反向传播的维度或导数公式否则后面所有训练结果都不可信。4. 模型评估与优化偏差方差与学习曲线的判断逻辑训练完模型不等于结束作业里有一整块在讲怎么判断模型是好是坏、该往哪个方向调。这部分内容在复习时最容易被当成理论背过去实际上它是整套作业里最实用的调试框架。4.1 偏差与方差诊断模型病症的两把尺子高偏差对应欠拟合训练误差和验证误差都高且接近高方差对应过拟合训练误差低但验证误差明显高。作业里常要求根据学习曲线判断属于哪种情况再决定是加特征、加数据还是调正则化。梳理下来会发现判断逻辑其实是一张决策表症状训练误差验证误差对策高偏差高高增加特征、提高模型复杂度、减小正则化高方差低高增加样本、减小特征、增大正则化这张表的价值在于它把「调参靠猜」变成了「看曲线下药」。复习时建议把每条对策和对应的代价函数改动对应起来记而不是孤立背结论。4.2 学习曲线样本量与误差的走势解读学习曲线横轴是训练样本数纵轴是误差。高偏差时两条曲线很快汇合且都停在较高位置增加样本没用高方差时两条曲线中间有明显间隙增加样本能缩小间隙。作业里画学习曲线的代码通常要循环不同样本量、重复训练注意每次训练前要重新初始化参数否则结果会被上一次的训练污染。4.3 正则化参数调优lambda 的扫描方法$\lambda$ 的选取作业里一般用验证集扫描给定一组候选值对每个值训练模型、算验证误差取验证误差最小的那个。注意扫描时要用同一份训练集和验证集划分否则比较没有意义。这个流程和后面讲的无监督学习里的 K 值选择是同一套思路复习时可以放在一起记。5. 无监督学习与推荐系统聚类降维与协同过滤的要点无监督学习部分作业量相对小但概念密度高K-means、PCA、异常检测、推荐系统挤在一起复习时容易记混。抓住每条线的「目标函数 迭代方式」两个抓手就能把它们区分开。5.1 K-means 聚类两步迭代与初始化陷阱K-means 的目标是最小化每个样本到其所属簇中心的距离平方和。算法就两步分配样本到最近中心再更新中心为簇内均值交替直到收敛。作业里常要求实现这两步并观察迭代过程。最容易忽略的是初始化。随机选初始中心可能导致局部最优作业里通常要求多次随机初始化取代价最小的那次。另外 K 值的选择没有解析解常用肘部法看代价随 K 的变化拐点。5.2 PCA 降维协方差矩阵与主成分选取PCA 的步骤是先做均值归一化再算协方差矩阵然后做奇异值分解取前 k 个主成分。作业里常要求根据累计方差贡献率选 k比如保留 99% 的方差。注意 PCA 前必须归一化否则量纲大的特征会主导主成分方向这是降维作业里最常见的翻车点。5.3 异常检测与推荐系统高斯建模与协同过滤异常检测用高斯分布对每个特征建模算样本的联合概率低于阈值判为异常。阈值 $\epsilon$ 通常用验证集上的 F1 分数来选而不是拍脑袋定。推荐系统部分作业讲的是协同过滤核心是最小化带正则的预测误差参数包括用户特征和物品特征两者交替优化。复习时把这两块的代价函数和梯度写在一起对比能看出它们都是「预测误差 正则项」的变体。6. 易错点清单作业里最容易翻车的五个地方复习到这一步知识点已经铺开但真正拉开差距的是那些反复踩的坑。下面五条是从作业和笔记里梳理出的高频易错点每条按「易漏点 → 为什么漏 → 怎么补」展开。易漏点一向量化时忘了补偏置列。为什么漏单变量推导时习惯手写 $\theta_0$切到矩阵实现就忘了 $x_01$ 这一列。怎么补在每次构造特征矩阵后立刻打印形状确认列数等于特征数加一。易漏点二正则化把偏置项也算进去。为什么漏向量化写法theta整体参与运算切片容易漏。怎么补正则项统一用theta[1:]并在梯度检验里单独检查 $\theta_0$ 的梯度是否与数值梯度一致。易漏点三梯度下降没有同步更新。为什么漏循环里逐个更新参数后面的参数用到了已更新的值。怎么补先算好全部梯度存进临时向量再统一更新或用向量化一次性完成。易漏点四学习率过大导致代价发散。为什么漏只看最终结果不看代价曲线。怎么补每次训练先画代价随迭代次数的曲线不降就调小学习率这是最省时间的排查手段。易漏点五训练集和验证集划分不一致。为什么漏调参时反复重新划分导致不同模型不可比。怎么补固定随机种子整个调参过程复用同一份划分。7. 复习清单按模块自查与查漏补缺的具体做法把前面几章收拢成一份可执行的自查流程比再读一遍讲义有用得多。具体做法是先不看答案版用无答案版按模块限时做一遍做完再对照有答案版逐题核对把错题按「概念不清 / 实现错误 / 维度问题」三类归档。个人笔记在这里的作用是提供第三视角看看别人是怎么归纳同一个知识点的往往能补上自己没意识到的盲区。下面这张自查表可以按周推进每完成一个模块打勾并记录错题类型模块自查动作通过标准常见失分点线性回归手推梯度并跑通单变量与多变量代价单调下降忘归一化、不同步更新逻辑回归对比线性与逻辑的代价函数差异能说清为何换交叉熵正则化误伤偏置项神经网络手写前向与反向并做梯度检验相对误差小于 1e-7维度错、导数公式错模型评估画学习曲线判断偏差方差能给出对应对策样本量循环未重置参数无监督学习实现 K-means 与 PCA多次初始化取最优PCA 前未归一化具体执行时建议每天只攻一个模块做完立刻对答案错题当天归档不要攒到最后。对照答案版时不要只看结果对不对要看实现路径是否一致路径不同但结果相同的情况在向量化作业里很常见这时候要判断自己的写法是否在边界情况下也成立。我自己的习惯是每做完一个模块强制把该模块的代价函数、梯度公式、易错点各写一遍写不出来的地方就是没真懂的地方。这个动作看起来笨但比反复刷视频省时间。从那以后我每次复习机器学习都强制走一遍「无答案限时做 → 有答案逐题对 → 错题分类归档 → 公式默写」的流程盲区一次比一次少。希望这套梳理能帮到你把这份作业和笔记用成一张真正能查漏补缺的地图。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。