机器学习期末复习资料怎么用?从梯度下降、交叉验证到K-means与PCA的考点复现
简介这份电子科技大学机器学习期末考试资料面向正在备考机器学习课程的高校学生尤其适合需要系统梳理考点、查漏补缺的复习者。内容覆盖梯度下降、模型评估与交叉验证、过拟合、线性回归、决策树、朴素贝叶斯、MP模型、K-means、PCA、SVM、CNN等核心知识点并整理了简答题与计算题等典型考题方向可帮助读者快速定位重点概念与推导思路。资源包共1个PDF文件约1008KB以文档形式集中呈现课程笔记与考点归纳便于打印或电子端反复查阅。目前已有6458人学习下载说明其在校内备考群体中具有较高参考价值。读者可借助该资料对照课堂内容复盘决策树互信息、SVM优化目标与约束、PCA信号重构推导、K-means流程及目标函数等高频考点提升期末复习效率。1. 从一份期末复习资料说起机器学习到底怎么考、怎么用如果你正在搜“机器学习 期末考试”相关的复习资料大概率你手里已经有一份知识点清单但不确定它到底覆盖了什么、能不能直接拿来用。我拿到这份资料时第一反应是它不是那种只列名词的提纲而是把梯度下降、交叉验证、过拟合、线性回归、决策树、朴素贝叶斯、MP模型、K-means、PCA、SVM、CNN这些核心考点串成了一条线每个点都带了定义、步骤、优缺点和典型考题。换句话说它更像一份“考点考法”的对照表而不是教科书目录。这份资料适合两类人一类是正在准备期末、需要快速定位重点和计算题套路的同学另一类是已经工作、想回头把机器学习基础概念重新捋一遍的从业者。它的价值不在于教你调参而在于把每个算法的“输入是什么、输出是什么、目标函数长什么样、边界在哪”讲清楚。下面我按“先立住理论、再落到复现、最后说坑”的顺序把这份资料拆开讲一遍。2. 梯度下降与模型评估从下山思想到k折交叉验证的落地细节2.1 梯度下降的迭代逻辑与学习率边界梯度下降在这份资料里被描述为“下山思想”以当前位置为基准找最陡峭的方向走一步再以新位置为基准继续找。这个比喻很准但落到计算题里关键就三件事目标函数、梯度、学习率。目标函数是你想最小化的东西比如线性回归里的均方误差梯度是函数对参数的偏导决定往哪走学习率决定每步走多大。我一般会先写一个最小可运行的梯度下降把参数更新过程打印出来确认每一步损失确实在降。下面这段代码用一维线性回归演示数据是虚构的重点看更新逻辑import numpy as np # 虚构数据y 3x 2 附近加噪声 np.random.seed(0) X np.linspace(0, 10, 50) y 3 * X 2 np.random.normal(0, 1, 50) # 初始化参数 w, b 0.0, 0.0 lr 0.01 # 学习率太大震荡太小收敛慢 epochs 1000 for i in range(epochs): y_pred w * X b # 均方误差对 w 和 b 的偏导 dw -2 * np.mean(X * (y - y_pred)) db -2 * np.mean(y - y_pred) w - lr * dw b - lr * db if i % 200 0: loss np.mean((y - y_pred) ** 2) print(fepoch {i}, loss {loss:.4f}, w {w:.4f}, b {b:.4f}) print(f最终 w{w:.4f}, b{b:.4f})逻辑说明dw和db是损失函数对两个参数的偏导前面乘-2是因为均方误差求导后系数保留。参数更新用w - lr * dw方向是梯度的反方向。参数说明lr一般从 0.01 或 0.001 试起如果损失曲线出现震荡或发散先降学习率如果收敛太慢再考虑增大或换自适应方法。资料里强调“梯度的方向就是函数变化最快的方向”这句话在计算题里常考给你一个函数和初始点让你手算一步梯度下降后的参数值。2.2 k折交叉验证的流程与过拟合判断资料里把交叉验证的作用说得很直白衡量算法表现是否稳定。过程是把数据分成多个训练集和测试集训练多个模型。k折交叉验证是最常用的形式把数据分成k个子集每次用k-1个训练、剩下1个测试重复k次最后取平均。这里有个容易翻车的点如果数据本身有时间顺序不能随机打乱否则会引入未来信息导致评估结果虚高。过拟合在这份资料里的定义是训练时把训练误差弄到最小某种程度上把训练样本自身的特点也融入了进来导致泛化能力降低。原因最常见的是学习能力过于强大把训练样本特有的属性也学进来了。资料里有一句很关键的话“无法彻底避免只能缓解。”这句话在简答题里经常出现标准答法就是先承认过拟合不可完全消除再列缓解手段增加数据、正则化、剪枝、早停、交叉验证。我一般会用一个具体场景来判断过拟合训练集准确率100%验证集准确率70%这就是典型的过拟合信号。资料里也提到了这个例子。对应的排查步骤是先看训练集和验证集的差距差距大就是过拟合差距小但都低就是欠拟合。欠拟合的定义是模型简单、数据复杂无法学到一般规律。这两种情况在计算题里可能让你判断并给出改进方向。3. 线性回归、决策树与朴素贝叶斯三个经典模型的复现与参数说明3.1 线性回归的最小二乘与非线性转线性线性回归在这份资料里的定义是利用回归方程对一个或多个自变量和因变量之间关系进行建模。模型就是选择一条线性函数来很好拟合已知数据并预测未知数据。最小二乘法是通过最小化误差的平方和寻找最佳函数匹配。这部分在计算题里通常要求你写出损失函数、求导、令导数为零解出参数。资料里还提到一个实验题非线性回归怎么变成线性回归。常见做法是对变量做变换比如把 (y a e^{bx}) 两边取对数变成 (\ln y \ln a bx)然后用线性回归去拟合。这个思路在考试里经常以“给出非线性形式问如何转化为线性”出现。我一般会先画散点图看形状像哪种函数再决定用对数、倒数还是多项式变换。下面这段代码演示最小二乘的矩阵解法和变换思路import numpy as np # 虚构数据y 2 * exp(0.5x) X np.linspace(0, 5, 30) y 2 * np.exp(0.5 * X) np.random.normal(0, 0.1, 30) # 非线性转线性ln(y) ln(2) 0.5x Y_log np.log(y) A np.vstack([X, np.ones(len(X))]).T coef, intercept np.linalg.lstsq(A, Y_log, rcondNone)[0] print(f拟合斜率 {coef:.4f}, 截距 {intercept:.4f}) print(f还原参数 a{np.exp(intercept):.4f}, b{coef:.4f})逻辑说明np.vstack构造设计矩阵第一列是x第二列是全1用于截距。np.linalg.lstsq直接解最小二乘。参数说明rcondNone是让NumPy自动处理数值精度。还原时a是截距的指数b是斜率。这个套路在考试里就是“先变换、再线性拟合、最后还原”。3.2 决策树的信息增益与剪枝策略决策树在这份资料里的步骤很清晰特征选择、决策树的生成、决策树的修剪。目标是将数据集正确分类本质是从训练集中归纳出一组分类规则。损失函数是正则化的极大似然函数。优点计算复杂度不高、输出结果易于理解、对中间值缺失不敏感、可以处理不相关特征缺点是可能产生过度匹配。资料里有一个简答题什么是互信息用互信息选择的目的是什么。互信息是衡量随机变量之间相互依赖程度的度量。用信息增益选择特征的目的是让决策树生成过程更高效效果是信息增益越大该特征越具有决策能力。剪枝分预剪枝和后剪枝预剪枝在训练开始前规定条件比如树达到某一深度就停止后剪枝先找到树再依据一定条件限制叶子结点个数去掉一部分分支。我一般会用一个表格来对比剪枝策略策略时机优点缺点预剪枝训练前计算开销小避免过拟合可能欠拟合错过有用分支后剪枝训练后保留更多分支泛化通常更好计算开销大需要额外验证集参数说明预剪枝常见参数是最大深度、最小样本分裂数、最小叶子样本数后剪枝常见做法是代价复杂度剪枝用验证集评估剪枝前后误差。考试里如果问“怎么防止过拟合”决策树部分就答预剪枝和后剪枝再补一句“两者可以结合使用”。3.3 朴素贝叶斯的独立假设与分类流程朴素贝叶斯在这份资料里的前提假设是每个输入变量是独立的。形式特点是算法逻辑简单、易于实现、分类过程中时空开销小。缺点是属性之间相互独立这个假设在实际应用中往往不成立。这部分在计算题里通常给你一批数据让你算先验概率、条件概率再判断类别。我一般会按三步走先统计每个类别的先验概率再统计每个特征在每个类别下的条件概率最后用贝叶斯公式算后验概率取最大。这里有个坑如果某个特征值在训练集里没出现过条件概率会变成0导致整个后验为0。常见做法是加平滑比如拉普拉斯平滑分子加1、分母加类别数。资料里没提平滑但考试里如果出现零概率你要知道这是独立假设和稀疏数据共同导致的。4. K-means、PCA与SVM无监督与最大间隔的实操要点4.1 K-means的质心迭代与停止条件K-means在这份资料里的中心思想是事先确定常数K随机选定初始点为质心计算每个样本与质心的相似度欧式距离将样本归到最相似的类重新计算每个类的质心重复直到质心不再改变。资料里也提到由于每次都要计算所有样本与每一个质心之间的相似度大规模数据集上收敛速度比较慢。我一般会关注四个参数K值、初始质心、距离度量、停止条件。K值怎么确定资料里没给标准答案常见做法是肘部法或轮廓系数。初始质心敏感常见做法是K-means。停止条件可以是质心变化小于阈值或者达到最大迭代次数。空聚类的处理是如果某个类没有样本重新随机选一个质心或者把最远的点分给它。下面这段代码用虚构数据演示K-means的核心迭代import numpy as np # 虚构二维数据 np.random.seed(1) data np.vstack([ np.random.normal([2, 2], 0.5, (30, 2)), np.random.normal([8, 8], 0.5, (30, 2)), np.random.normal([2, 8], 0.5, (30, 2)) ]) K 3 centroids data[np.random.choice(len(data), K, replaceFalse)] for step in range(20): # 分配样本到最近质心 distances np.linalg.norm(data[:, None] - centroids[None, :], axis2) labels np.argmin(distances, axis1) # 更新质心 new_centroids np.array([data[labels k].mean(axis0) for k in range(K)]) if np.allclose(new_centroids, centroids): print(f第 {step} 步收敛) break centroids new_centroids print(最终质心) print(centroids)逻辑说明data[:, None] - centroids[None, :]利用广播计算每个样本到每个质心的差值再求范数得到距离。argmin取最近质心。更新质心时对每个簇取均值。参数说明K是类别数step是迭代上限np.allclose判断质心是否不再变化。考试里如果问K-means和EM算法的不同可以答K-means是硬分配每个样本只属于一个簇EM是软分配用概率表示属于每个簇的可能性。4.2 PCA的降维推导与信号压缩PCA在这份资料里的定义是一种常见的数据分析方式常用于高维数据的降维可用于提取数据的主要特征分量。目的有两个简化统计数据即降维揭示变量间的关系。资料里有一个考题从信号重构角度推导PCA怎么实现信号压缩。这个推导的核心是找到一组正交基使得数据投影后的方差最大同时重构误差最小。我一般会按协方差矩阵、特征值分解、取前k个特征向量、投影这几步走。下面用虚构数据演示import numpy as np # 虚构三维数据 np.random.seed(2) X np.random.normal(0, 1, (100, 3)) X[:, 2] X[:, 0] * 0.8 X[:, 1] * 0.2 np.random.normal(0, 0.1, 100) # 中心化 X_centered X - X.mean(axis0) # 协方差矩阵 cov np.cov(X_centered, rowvarFalse) # 特征值分解 eigvals, eigvecs np.linalg.eigh(cov) # 按特征值降序排列 idx np.argsort(eigvals)[::-1] eigvals eigvals[idx] eigvecs eigvecs[:, idx] # 取前两个主成分 W eigvecs[:, :2] X_pca X_centered W print(主成分方差, eigvals[:2]) print(降维后形状, X_pca.shape)逻辑说明中心化是PCA的前提否则第一主成分会指向均值。协方差矩阵描述各维度之间的相关性。eigh用于对称矩阵返回的特征值升序所以用argsort降序排列。W是投影矩阵取前两列。参数说明取几个主成分通常看累计方差贡献率比如达到85%或90%。资料里也提到PCA的缺点主成分各个特征维度的含义具有一定模糊性不如原始样本特征解释性强方差小的非主成分也可能含有对样本差异的重要信息丢弃可能影响后续处理。4.3 SVM的硬间隔、软间隔与核函数SVM在这份资料里的定义是一种二分类模型将实例的特征向量映射为空间中的一些点目的是画出一条线以“最好地”区分两类点。线性可分时的优化目标是最大化间隔约束条件是所有样本正确分类。支持向量是离决策表面最近的数据点。线性不可分时用核函数把原始样本映射到高维空间让样本在高维特征空间中线性可分再用线性分类器。软间隔是允许一些样本不满足约束。性能相关有三个点核函数的选择、核函数的参数、软间隔参数C。C越大对误分类的惩罚越大间隔越窄容易过拟合C越小间隔越宽容易欠拟合。我一般会先用线性核试如果效果不好再换RBF核然后调gamma和C。考试里如果问“支持向量的意义”就答支持向量是决定分类边界的关键样本去掉非支持向量不影响边界。5. 避坑与排查这份资料里最容易翻车的五个点5.1 现象训练集准确率100%验证集只有70%原因过拟合。模型复杂、数据简单模型学到了训练样本特有的噪声和属性。解决先增加数据或做数据增强再加正则化决策树用剪枝神经网络用早停同时用交叉验证评估稳定性。资料里明确说过拟合无法彻底避免只能缓解所以答题时不要写“彻底消除”。5.2 现象梯度下降损失震荡或发散原因学习率太大或者特征没有归一化。解决先把学习率降一个数量级比如从0.1降到0.01再检查特征尺度做标准化或归一化。如果还不行换自适应优化方法。资料里强调梯度方向是变化最快的方向但没说步长怎么选这个坑在计算题里可能以“学习率过大导致什么后果”出现。5.3 现象K-means每次跑出来的聚类结果不一样原因初始质心随机K-means对初始点敏感。解决用K-means初始化或者多跑几次取最优。另外K值选得不对也会导致结果不稳定。资料里提到初始质心和C值如何确定是注意点但没展开实际做题时如果问“K-means的缺点”就答对初始质心敏感、需要预先指定K、大规模数据收敛慢。5.4 现象朴素贝叶斯某个类别概率为0原因某个特征值在训练集中没有出现条件概率为0连乘后整个后验为0。解决拉普拉斯平滑分子加1分母加类别数。资料里没提平滑但这是朴素贝叶斯实际使用中必须处理的点。考试里如果给的数据有零概率你要主动写平滑。5.5 现象PCA降维后分类效果反而变差原因丢弃了方差小但判别性强的成分或者没有做中心化。解决先检查是否中心化再看累计方差贡献率是否设得太低必要时保留更多主成分。资料里也提醒方差小的非主成分也可能含有重要信息因降维丢弃可能对后续处理有影响。6. 从考点到复现把这份资料变成可运行的复习脚本这份资料最大的价值是它把定义、步骤、优缺点和考题放在了一起但如果你只是读一遍考试时还是容易卡在计算题上。我的习惯是每复习一个算法就写一个最小可运行的脚本把资料里的步骤对应到代码行。比如梯度下降对应参数更新交叉验证对应数据划分决策树对应信息增益计算K-means对应质心迭代PCA对应特征值分解SVM对应间隔最大化。下面这个表格是我整理的“考点-代码-参数”对照你可以直接照着补全考点核心代码关键参数常见考题梯度下降参数更新循环学习率、迭代次数手算一步更新交叉验证数据分折k值过拟合判断线性回归最小二乘正则化系数非线性转线性决策树信息增益深度、叶子数剪枝策略朴素贝叶斯后验概率平滑系数独立假设K-means质心迭代K值、初始点流程与目标函数PCA特征值分解主成分数信号压缩推导SVM间隔最大化C、核参数支持向量意义我一般会先跑一遍代码确认输出和资料里的定义对得上再回头做简答题。比如资料里问“SVM线性可分时的优化目标和约束条件”你就把代码里的间隔表达式和约束写出来问“PCA从信号重构角度推导”你就把投影和重构误差写出来。这样复习一遍计算题和简答题都能覆盖。从那以后我每次拿到这种知识点清单都会先挑三个算法写成可运行脚本再对照资料里的考题自测一遍。希望帮到你。本文还有配套的精品资源点击获取