模式识别期末复习全攻略:从贝叶斯决策到集成学习 简介这份资料面向东南大学网络空间安全学院修读模式识别课程的学生汇集了课后作业参考答案与期末真题回忆版适合用来对照作业思路、把握考试重点。课程本身难度不高但作业量少而精考试约九成内容由作业题变式而来因此作业答案的参考价值远高于普通习题集。压缩包共814个文件约118.24MB其中400个bmp与390个pgm图像文件对应课程实验与作业中的数据集样本16个pptx为课堂讲义另有4个m脚本、2个docx文档及2个zip子包覆盖代码实现与文字说明。目前已有868人学习下载。借助作业答案可逐题核对算法实现与推导过程真题回忆版则帮助梳理考点分布与题型风格配合PPT自学即可完成复习尤其适合想用最少时间抓住考试主线的同学。1. 模式识别期末复习地图从作业答案到真题回忆的完整梳理模式识别这门课很多人学到一半会有种错觉公式都认识但连起来不知道在干什么。其实它的知识骨架非常清晰——从贝叶斯决策出发经过概率密度估计、线性判别、非线性判别再到特征选择和聚类分析最后落到近邻法和集成学习。每一块都在回答同一个问题给定一堆带特征的数据怎么让机器自动分出类别。作业答案和真题回忆版的价值不在于给你一个标准答案而在于帮你定位自己卡在哪一层。如果你正在系统学这门课或者期末临近想快速查漏补缺下面这份梳理会按知识模块逐层展开把重点、难点和最容易翻车的地方都标出来。2. 贝叶斯决策与概率密度估计模式识别的地基2.1 贝叶斯决策的核心逻辑模式识别里几乎所有方法都可以追溯到贝叶斯决策理论。它的核心思想是给定一个样本的特征向量 x计算它属于每个类别的后验概率 P(ωᵢ|x)然后选择后验概率最大的类别作为判决结果。后验概率通过贝叶斯公式展开P(ωᵢ|x) P(x|ωᵢ) · P(ωᵢ) / P(x)其中 P(x|ωᵢ) 是类条件概率密度P(ωᵢ) 是先验概率P(x) 是证据因子。在实际做题时P(x) 对所有类别相同所以判决规则可以简化为比较 P(x|ωᵢ) · P(ωᵢ) 的大小。这里有几个容易混淆的点需要提前理清。先验概率反映的是在没看到任何特征之前你对类别分布的判断类条件概率密度反映的是“如果已知属于某个类特征长什么样”。两者相乘得到联合概率再归一化得到后验概率。很多作业题会给出一组训练样本让你估计先验和类条件密度然后对测试样本做判决——这类题的完整流程是统计各类样本频率得到先验 → 假设某种分布形式通常是正态分布→ 用最大似然估计参数 → 代入贝叶斯公式做判决。注意先验概率的估计有两种常见方式——用训练样本中各类的频率代替或者题目直接给定。如果题目没说默认用频率估计。2.2 最大似然估计与贝叶斯估计的区别参数估计是贝叶斯决策绕不开的一步。最大似然估计MLE把参数 θ 看作固定未知量找使似然函数最大的 θ 值贝叶斯估计把 θ 看作随机变量先给一个先验分布再用样本更新得到后验分布。对比维度最大似然估计贝叶斯估计参数观点固定未知常数随机变量有先验输出结果一个点估计值一个后验分布样本量小时容易过拟合先验起正则化作用计算复杂度较低需要积分通常较高典型考题给样本求均值和方差给先验和样本求后验考试里最常见的考法是给出一维正态分布假设让你写出似然函数求导令零解出均值和方差的MLE。这类题步骤固定但计算容易出错尤其是方差公式里除以 N 还是 N-1 的问题——MLE 用 N无偏估计用 N-1考试默认考 MLE。2.3 正态分布下的决策面当类条件概率密度假设为正态分布时决策面有非常漂亮的几何解释。如果各类协方差矩阵相等且为对角阵决策面是垂直于类别均值连线的超平面如果协方差矩阵相等但非对角决策面仍是超平面但不一定垂直如果协方差矩阵不同决策面变成二次曲面。这个结论在作业里经常以“判断决策面形状”的形式出现。梳理下来会发现关键就看协方差矩阵是否相等、是否对角。很多同学在这里翻车是因为只记了结论没理解推导——决策面方程来自令两个类别的判别函数相等判别函数取对数后二次项是否保留决定了决策面是线性还是二次。3. 线性判别与非线性判别从感知机到核方法3.1 线性判别函数与Fisher判别线性判别函数的形式是 g(x) wᵀx w₀判决规则是 g(x) 0 归为一类否则归为另一类。感知机算法是最简单的求解方式初始化 w 和 w₀遍历样本遇到错分样本就更新权重。它的收敛条件是训练集线性可分但收敛后的解不唯一取决于初始值和样本遍历顺序。Fisher 判别分析走的是另一条路不直接找分界面而是找一个投影方向让投影后类间距离尽可能大、类内距离尽可能小。定义类间散度 S_B 和类内散度 S_WFisher 准则函数是 J(w) wᵀS_B w / wᵀS_W w最优解是 S_W⁻¹(μ₁ - μ₂) 方向。方法优化目标解的性质适用场景感知机最小化错分样本不唯一依赖初始化线性可分数据Fisher判别最大化类间/类内比解析解唯一两类或多类最小平方误差最小化MSE解析解线性可分或近似可分作业里 Fisher 判别的计算题通常分三步算各类均值 → 算类内散度矩阵 → 求 S_W⁻¹(μ₁ - μ₂)。最容易错的地方是散度矩阵的定义——有的教材用 S_W Σ Σ (x - μᵢ)(x - μᵢ)ᵀ有的用除以样本数的版本考试时要看清题目用的是哪种定义。3.2 非线性判别与核方法思路当数据线性不可分时有两种主流思路。一种是直接用非线性判别函数比如二次判别函数 g(x) w₁x² w₂x w₀本质上是在原始空间找曲线分界。另一种是核方法把数据映射到高维空间在高维空间里用线性判别。核方法的核心是核技巧——不需要显式写出映射函数 φ(x)只需要知道核函数 K(xᵢ, xⱼ) φ(xᵢ)ᵀφ(xⱼ)。常用的核函数包括多项式核、高斯核RBF核和Sigmoid核。支持向量机SVM就是核方法最典型的应用它找的是最大间隔超平面只有支持向量决定最终分界面。提示考试里如果考到 SVM重点通常是对偶问题、KKT 条件和支持向量的判定而不是完整的求解过程。记住一点——支持向量对应的拉格朗日乘子 αᵢ 0非支持向量 αᵢ 0。3.3 多层感知机与反向传播多层感知机MLP通过堆叠非线性激活函数来拟合复杂分界面。一个典型的三层结构是输入层 → 隐层激活函数通常用 Sigmoid 或 ReLU→ 输出层。反向传播算法用链式法则逐层计算梯度更新权重。考试里对 MLP 的考察通常不会让你手推完整反向传播但会考几个关键点为什么需要非线性激活函数因为线性堆叠还是线性、Sigmoid 的梯度消失问题、学习率对收敛的影响。作业里如果有编程题通常是让你实现一个简单的两层网络做二分类重点看梯度计算是否正确。4. 特征选择与聚类分析降维与无监督的复习重点4.1 特征选择与降维方法特征选择的目的是从原始特征中挑出最有判别力的子集去掉冗余和噪声。常见方法分三类过滤式如卡方检验、互信息、包裹式如递归特征消除、嵌入式如 L1 正则化。降维则不同它是把原始特征映射到低维空间主成分分析PCA是最经典的方法。PCA 的步骤很固定去中心化 → 算协方差矩阵 → 求特征值和特征向量 → 按特征值从大到小排序 → 取前 k 个特征向量组成投影矩阵。考试里常考的是给定一组二维数据让你手动算 PCA 投影方向。计算量不大但容易在协方差矩阵的符号和特征向量归一化上出错。方法类型是否用标签输出典型考题PCA降维无监督投影矩阵手算投影方向LDA降维有监督投影矩阵与PCA对比卡方检验特征选择有监督特征评分选top-k特征递归消除特征选择有监督特征子集流程描述LDA 和 PCA 经常被放在一起考。核心区别是PCA 找方差最大的方向LDA 找类间散度与类内散度比值最大的方向。PCA 是无监督的LDA 是有监督的。如果题目问“哪个更适合分类任务”答案通常是 LDA因为它利用了类别信息。4.2 聚类分析K-means与层次聚类聚类是无监督学习的代表任务。K-means 是最常用的聚类算法步骤是随机选 k 个初始中心 → 把每个样本分配到最近的中心 → 重新计算中心 → 重复直到收敛。它的目标函数是各样本到所属中心的距离平方和。K-means 有几个众所周知的坑k 值需要预先指定、对初始中心敏感、只能发现球形簇。考试里常考的是给一组一维或二维数据让你手动执行一轮或两轮 K-means 迭代。计算本身不难但要注意距离的定义——默认是欧氏距离如果题目指定了其他距离要换公式。层次聚类分凝聚式自底向上和分裂式自顶向下。凝聚式层次聚类的步骤是每个样本自成一簇 → 找最近的两簇合并 → 重复直到只剩一簇。簇间距离有三种常见定义最小距离单链、最大距离全链、平均距离。不同的定义会导致不同的聚类结果这也是考试容易设陷阱的地方。4.3 聚类评价指标聚类没有标签怎么评价好坏常用指标分两类。外部指标需要真实标签如调整兰德指数ARI和归一化互信息NMI。内部指标不需要标签如轮廓系数和 Davies-Bouldin 指数。轮廓系数的计算方式是对每个样本算它到同簇其他样本的平均距离 a到最近其他簇所有样本的平均距离 b轮廓系数 s (b - a) / max(a, b)。取值范围是 [-1, 1]越接近 1 说明聚类效果越好。这个公式在作业里出现频率很高但很多同学记反了 a 和 b 的含义——a 是簇内距离b 是簇间距离。5. 近邻法与集成学习容易忽略的细节与易错点5.1 K近邻法的关键参数K近邻KNN的直觉非常简单看一个样本周围最近的 k 个邻居多数属于哪类就判为哪类。但它的细节比想象中多。k 值的选择直接影响决策边界——k 太小容易过拟合噪声k 太大容易欠拟合。距离度量默认是欧氏距离但也可以选曼哈顿距离或闵可夫斯基距离。决策规则通常是多数投票但也可以按距离加权投票。KNN 最大的问题是计算量大——每次预测都要遍历整个训练集。改进思路包括用 KD 树或球树加速近邻搜索、做训练集剪辑去掉对决策没影响的样本、用近似最近邻算法牺牲一点精度换速度。考试里如果考 KNN通常集中在 k 值影响、距离度量选择和加权投票的计算。5.2 集成学习Bagging与Boosting集成学习通过组合多个弱分类器来提升整体性能。两大主流框架是 Bagging 和 Boosting。Bagging 的核心是自助采样——从训练集有放回地抽多个子集每个子集训练一个基分类器最后投票或平均。随机森林就是 Bagging 的典型代表它在样本采样之外还加了特征随机选择。Boosting 的核心是序列化训练——每个新分类器关注前一个分类器分错的样本。AdaBoost 是最经典的 Boosting 算法它通过调整样本权重来实现这一点。梯度提升GBDT则是把 Boosting 推广到任意可微损失函数。对比维度BaggingBoosting训练方式并行基分类器独立串行后一个依赖前一个样本权重均匀动态调整偏差-方差主要降方差主要降偏差代表算法随机森林AdaBoost、GBDT过拟合风险较低较高需控制轮数5.3 易漏点与易错点梳理下来会发现模式识别考试里真正拉开差距的不是难题而是那些“以为会了其实没会”的细节。以下是最容易翻车的几个地方。易漏点一先验概率的估计方式。为什么漏因为很多题目直接给先验导致做题时形成惯性遇到需要自己估计的题就忘了用频率代替。怎么补每次做贝叶斯题先确认先验是给定还是需要估计如果是估计数清楚各类样本数除以总数。易漏点二协方差矩阵是否共享。为什么漏因为题目通常只给一组协方差矩阵不明确说是否各类共享。怎么补看题目描述——如果只给一个协方差矩阵默认各类共享如果每类各给一个就是不共享。这个区别直接决定决策面是线性还是二次。易漏点三K-means 的迭代终止条件。为什么漏因为教材重点讲算法步骤对终止条件一笔带过。怎么补记住两个常用条件——中心点不再变化或者达到最大迭代次数。考试里如果让你手动迭代通常做到中心点稳定为止。易漏点四Fisher 判别中散度矩阵的定义。为什么漏因为不同教材符号不同有的用 S_W 有的用 Σ_W有的除以样本数有的不除。怎么补做题时先看题目给的公式定义按题目定义算不要凭记忆套。易漏点五KNN 的 k 值取偶数时的平票处理。为什么漏因为大多数例子用奇数 k遇到偶数就懵了。怎么补常见处理方式有三种——随机选一类、按距离加权投票、降 k 到奇数。题目如果没指定默认按距离加权。6. 查漏补缺一份可执行的复习清单复习到后期最怕的不是不会而是不知道自己哪里不会。下面这份清单按“先诊断后补漏”的思路组织可以逐条过一遍确认自己是否真的掌握。模块自检问题如果答不上来贝叶斯决策能否写出后验概率公式并解释每一项含义回到第2.1节重推一遍参数估计MLE和贝叶斯估计的区别是什么看对比表手推一维正态MLE线性判别Fisher判别的最优方向怎么求手算一道两类Fisher题非线性判别核技巧为什么能避免显式映射理解K(xᵢ,xⱼ)φ(xᵢ)ᵀφ(xⱼ)特征选择PCA和LDA的核心区别对比两者的优化目标聚类K-means的目标函数是什么写出距离平方和公式近邻法k值大小对偏差方差的影响画图理解k1和kN的极端情况集成学习Bagging和Boosting的偏差方差差异看对比表记典型算法具体操作上建议按以下步骤走一遍。第一步拿一张白纸不看书把每个模块的核心公式写出来。写不出来的就是薄弱点。第二步针对薄弱点回到对应章节做两道计算题。第三步把作业里做错的题重新做一遍重点看当时错在哪一步。第四步如果有真题回忆版按题型分类——计算题、简答题、编程题各占多少优先补计算题因为计算题最容易通过练习提分。# 以KNN为例复习时可以用这段代码验证k值影响 # 关键参数n_neighbors控制k值weights控制投票方式 from sklearn.neighbors import KNeighborsClassifier from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split X, y make_classification(n_samples200, n_features2, n_informative2, n_redundant0, random_state42) X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3) for k in [1, 3, 5, 15]: clf KNeighborsClassifier(n_neighborsk, weightsuniform) clf.fit(X_train, y_train) acc clf.score(X_test, y_test) print(fk{k}, 准确率{acc:.3f}) # 观察k从1增大时准确率先升后降理解过拟合与欠拟合这段代码的作用是直观感受 k 值对分类准确率的影响。n_neighbors 就是 kweightsuniform 表示等权投票改成 distance 就是按距离加权。跑一遍就能看到 k1 时训练集准确率很高但测试集可能偏低k 太大时两者都下降。这种验证比死记结论有效得多。从那以后我每次复习模式识别都强制走一遍“白纸写公式 → 错题重做 → 代码验证”的流程不再只是翻书看一遍。希望这份梳理能帮到你期末顺利。本文还有配套的精品资源点击获取