模式识别期末复习:用一条主线串联贝叶斯决策与PCA等核心考点 简介《XDU模式识别期末知识点串联》是一份面向西安电子科技大学模式识别课程学生的期末复习笔记专门用于考前知识体系梳理与核心考点速览帮助学习者把贝叶斯理论、判别函数、线性与非线性判别、无监督学习等内容串成完整框架。整份资料以单个PDF文件交付压缩后约1.4MB内容紧凑但包含大量公式、算法步骤与例题覆盖贝叶斯决策、Fisher判别、感知准则函数、广义线性判别、KNN、决策树、高斯混合模型、EM算法、K-means、FCM、层次聚类、特征选择以及SVM等高频考点。目前已有711人学习/下载适合西电本科生期末冲刺、考研复试准备也可供其他高校模式识别初学者参考。笔记采用章节串联方式从基础概念到无监督学习再到特征选择依次展开能够帮助读者快速定位薄弱环节在较短时间内完成系统性回顾和查漏补缺。1. 期末复习模式识别最缺的不是公式而是串联期末复习模式识别最容易出现的一种状态是讲义翻到哪背到哪贝叶斯公式、判别函数、PCA 这些名词全都眼熟可题目换个包装就不知道从哪下手。我后来发现问题不在记性而在知识点之间没有串联起来。这篇整理要做的就是把一门模式识别课的知识点挂到一条主线上——从数据表示到模型假设再到决策规则让每个公式都找到自己在流程里的位置让每个算法都能回答三个问题它解决什么、它假设什么、它和上下环节怎么衔接。适合考前想快速建立体系感的人也适合学完课程却写不出代码的人。把这三个问题过一遍期末复习的“玄学感”会少很多考场看到综合题也更容易定位考点。2. 先把主线立起来三个问题贯穿整门课2.1 从数据到决策模式识别课程的唯一主线模式识别课程看起来章节很多从贝叶斯决策到聚类分析跨度很大。但认真拆开看所有内容都在回答一条线上三个环节的问题数据用什么特征表示数据服从什么分布模型给定模型后如何做出最小损失的决策。我习惯把这条线叫“表示—模型—决策”主线。复习时先不要急着背公式而是先画一张三栏表格把所有知识点填进去主线阶段回答的问题挂载的知识点表示层数据用什么特征描述特征是否太多或太冗余特征选择、特征抽取、PCA、LDA模型层类条件概率密度长什么样参数怎么估计高斯分布假设、极大似然估计、贝叶斯估计、Parzen窗、k近邻决策层给定模型后怎么把新样本判到最合适的类别贝叶斯决策、判别函数、感知机、Fisher线性判别、SVM这张表最大的价值不是画出来好看而是给题目定位。拿到一道考题先问自己它考的是哪一层给你一堆样本让估计均值和协方差是模型层给你损失矩阵让判断该判哪类是决策层让你对高维数据降维是表示层。定位错了后续公式全用不对。填表的时候有个技巧如果某个知识点放不进任何一层说明你还没真正理解它先回讲义把它读懂再填。这一条能筛掉大部分“假复习”因为平时看着眼熟的公式真要归类时往往发现并不知道它属于哪个环节。2.2 特征、类别与决策面先统一术语再谈公式不少公式记不住是因为术语没有对齐。模式识别课程里最基础的一串术语是特征向量、特征空间、类别、判别函数、决策面。特征向量是样本的描述特征空间是所有特征向量构成的空间类别是我们要预测的目标判别函数是对特征向量打分的函数决策面是判别函数取值相等的点集。把这串术语理顺后面大半算法都能统一成一句话构造一个判别函数让决策面把不同类别的样本分开。感知机构造的是一个线性判别函数Fisher线性判别找的是投影后的一维判别函数SVM构造的是带间隔的线性判别函数。差别只在用什么准则找、找出来的决策面有什么性质。所以复习线性分类器时不需要死背每个人的推导过程抓住“目标函数不同”这一个点就够展开。比如问到感知机和SVM的区别先答两者的目标函数不同再答SVM还依赖支持向量思路就清晰了。统一术语还能避免答题时把“决策面”和“分类结果”混着写这在期末阅卷里是常见扣分点。2.3 监督与非监督从“有没有标签”看全局第三个问题是监督与非监督的划分。分类、回归这类任务有标签属于监督学习聚类这类任务没有标签属于非监督学习。这个划分看起来简单但很多同学在期末混用概念把聚类当分类做拿分类的评价指标去评聚类结果这些错误都源于没有在全局图上定位。监督内部还要再切一刀生成方法和判别方法。生成方法先对每一类估计类条件概率密度再通过贝叶斯公式求后验比如高斯贝叶斯分类器判别方法不估计密度直接找决策面比如感知机和SVM。这一刀切下去复习顺序就清楚了贝叶斯决策和参数估计属于生成路线线性分类器属于判别路线。这两条路线不要混着记。生成方法的好处是数据量少时也能稳定工作坏处是分布假设错了会整体崩溃判别方法的好处是不依赖分布假设坏处是需要更多数据来拟合复杂边界。考试问“为什么会有生成和判别两种思路”就从“对分布假设的依赖程度”这个角度答比硬背定义有价值得多。3. 主线第一段贝叶斯决策与参数估计所有分类器的地基3.1 贝叶斯决策最小错误率与最小风险不是在讲同一件事贝叶斯决策是整个主线决策层的起点。它的输入是后验概率输出是一个类别判断。公式写法多样但核心是一个在观察到特征 x 之后计算每个类别的后验概率选最大的作为答案。后验由先验和类条件概率密度相乘得到分母是证据因子通常只起归一化作用。最小错误率决策是最基本的版本它假设所有错判代价相同所以选后验最大的类别等价于选“似然乘先验”最大的类别。最小风险决策则引入损失矩阵给每种真实类别和判定结果的组合定一个代价然后对每个 x 计算把它判到各类别的期望损失选期望损失最小的类别。决策准则依据适用场景最小错误率后验概率最大错判代价无差异最常用最小风险条件风险最小错判代价差异大如医疗诊断举一个考试常见的例子医疗诊断中漏诊和误诊的代价明显不同这时用最小错误率决策解释不了为什么宁可多复查也不放过必须走最小风险。考题里看到“损失矩阵”“代价”这类关键词立刻切换到最小风险题目没提代价默认最小错误率。这个切换点是期末最常见的考点和失分点。复习时还要注意一类问法给一个二分类问题让判断决策面在什么位置。这时要回到判别函数把两个类别的后验概率取对数再比较化简后往往得到一个线性或二次的判别式。这个推导过程建议亲手写一遍不然考场上从贝叶斯公式推到判别式时间会不够。3.2 参数估计为什么说“估计出参数就等于训练好了模型”贝叶斯决策需要类条件概率密度 p(x|w)但现实中我们只有有限个样本所以要选一个分布形式再估计它的参数。课程里最爱用的是高斯分布因为形式简单参数估计有闭式解推导也不复杂。极大似然估计的思路是参数是固定的未知常数让当前这批样本出现的概率最大。对高斯分布做极大似然估计得到均值就是样本均值协方差就是样本协方差。这里要会写似然函数会对数化会对均值求导并令其为零。整个过程在期末计算题里通常占两道左右值得反复练。贝叶斯估计的思路不同把参数当成随机变量给它一个先验分布再用样本更新得到后验分布最后用后验做预测。两者对比很清楚估计方法对参数的态度输出样本量小时的表现极大似然估计固定未知常数一个点估计容易过拟合贝叶斯估计随机变量一个后验分布更稳依赖先验复习时先确认这门课的重点是极大似然还是贝叶斯估计。多数课程以极大似然为主贝叶斯估计考概念和对比。如果两头都抓但都不深考试时反而容易混。先掌握极大似然的完整计算过程再背贝叶斯估计的流程顺序不要反过来。3.3 用最小代码跑通地基一个高斯贝叶斯分类器讲再多公式不如跑一段代码。我一般会把贝叶斯决策、极大似然估计和判别函数串成一个最小的可运行例子用两组二维高斯数据生成样本估计参数最后做预测。代码如下import numpy as np # 固定随机种子保证结果可复现 np.random.seed(0) # 生成两类二维高斯样本均值不同协方差相同 cls1 np.random.multivariate_normal([1, 1], [[0.5, 0], [0, 0.5]], 200) cls2 np.random.multivariate_normal([3, 3], [[0.5, 0], [0, 0.5]], 200) # 极大似然估计均值取样本均值协方差取样本协方差 mu1 cls1.mean(axis0) mu2 cls2.mean(axis0) cov1 np.cov(cls1.T) cov2 np.cov(cls2.T) # 先验概率按样本占比估计 prior1 len(cls1) / (len(cls1) len(cls2)) prior2 1 - prior1 def gauss_pdf(x, mu, cov): d len(mu) det np.linalg.det(cov) inv np.linalg.inv(cov) diff x - mu return 1.0 / (np.power(2 * np.pi, d / 2) * np.sqrt(det)) * np.exp(-0.5 * diff inv diff) def predict(x): p1 gauss_pdf(x, mu1, cov1) * prior1 p2 gauss_pdf(x, mu2, cov2) * prior2 return 0 if p1 p2 else 1这段代码的逻辑是先假设每一类都服从高斯分布再用极大似然估计出均值和协方差最后用贝叶斯公式算后验并比较大小。predict 函数里没有取对数二维情况下没问题但维度升高后 exp 容易下溢到时候应改成比较对数后验。参数说明mu 是均值向量决定类别中心cov 是协方差矩阵决定样本散布形状prior 是先验概率。你可以把 cls2 的均值从 [3, 3] 改成 [1.5, 1.5]观察两类重叠变大后分类边界如何移动也可以把协方差改成 [[1, 0], [0, 1]]观察决策面从斜线变正的过程。改参数能预判结果才算真正理解了这个分类器的行为。提示实际工程里不会手写高斯 pdf直接用现成库的高斯混合模型接口即可。期末复习阶段手写一遍是为了把贝叶斯公式和参数估计锚定在代码上这一步值得做。4. 主线第二段线性分类器与特征空间变换4.1 感知机、Fisher线性判别与SVM三条路指向同一个决策面这三个算法是模式识别课上最常放在一起考的线性分类器。它们的共同点是都构造线性决策面不同点是找决策面时用的准则。理解了这一点三个算法就不再是三个孤立的黑匣子而是同一个目标下的三种策略。感知机的准则是最小化错分驱动下的误分类次数训练时每次遇到错分样本就更新权重直到样本被完全分开。它的问题是数据线性不可分时不收敛所以严格来说只适用于线性可分数据。Fisher线性判别的准则是最大化类间散度与类内散度的比值把高维样本投影到一条直线上再在投影空间里定阈值。SVM的准则是最大化类别间隔决策面只由少数支持向量决定对离群点的鲁棒性最好。算法找决策面的准则训练特点常考对比点感知机错分样本驱动逐样本更新可能不收敛收敛条件、线性可分Fisher线性判别类间散度/类内散度最大求解投影向量再定阈值散布矩阵、投影方向SVM最大化间隔求解约束优化只依赖支持向量间隔、支持向量、核函数复习时记一个口诀感知机看收敛Fisher 看散布SVM 看支持向量。答题时如果问“感知机和SVM有什么区别”先写目标函数不同再写SVM 引入间隔和支持向量最后补一句感知机在线性不可分时无法收敛就能拿全大部分分数。4.2 PCA与LDA降维到底在保留什么降维发生在表示层目标是降低特征维度、缓解维度灾难。PCA 和 LDA 是最常考的两个降维方法很多同学把它们当成“都叫降维”就混在一起实际上一个无监督一个有监督目标函数完全不同。PCA 为了保留数据的方差它是无监督的不关心类别标签。计算步骤很固定去均值、算协方差矩阵、求特征值和特征向量、取最大几个特征值对应的特征向量组成投影矩阵。LDA 为了保留类别可分性它是有监督的需要标签它要计算类间散度矩阵和类内散度矩阵再求广义特征值问题。# PCA 核心步骤去均值、算协方差、取主方向 X_centered X - X.mean(axis0) cov np.cov(X_centered.T) eigvals, eigvecs np.linalg.eig(cov) # 按特征值从大到小排序取前 k 个特征向量组成投影矩阵 idx np.argsort(eigvals)[::-1] top_k eigvecs[:, idx[:k]]代码说明eigvals 是每个主方向上的方差大小eigvecs 的每一列是一个主方向。argsort 拿到特征值从大到小的索引再取前 k 个特征向量。参数 k 怎么定看累计方差贡献率一般取到 85% 到 95% 即可。注意这里得到的 top_k 是投影矩阵不是“选出来的原始特征”。一个二维例子就能说清楚 PCA 和 LDA 的区别数据沿某个方向方差最大但这个方向上两类样本完全重叠另一个方向方差小一点两类却分得很开。PCA 会选前者因为它在乎方差LDA 会选后者因为它在乎可分性。期末问“为什么 PCA 不直接用于分类”用这个例子回答最直观。4.3 特征选择与特征抽取别把两个动作混在一起很多同学把特征选择和特征抽取混为一谈考试写“用 PCA 选择了两个特征”术语上就错了。特征选择是从原始特征里挑一个子集保留物理意义比如从身高、体重、年龄里选出身高和体重特征抽取是对原始特征做变换生成新特征物理意义消失PCA 和 LDA 都属于这一类。特征选择的一般步骤是对每个特征算一个可分性指标比如类间距离或方差比按指标排序取前 k 个再用交叉验证确定 k 的取值。特征抽取不用对单个特征排序直接用变换矩阵把原始特征映射到低维空间常配合可视化来观察分布。术语用错的后果是概念分全丢。笔试里写“用 PCA 选择了两个特征”会被扣分应写“用 PCA 抽取了两个主成分”。这个细节在期末阅卷里经常出现。另外还要提一句维度灾难特征数越多样本在高维空间里越稀疏模型越容易过拟合这也是为什么表示层的降维和选择要放在主线最前面。5. 避坑串联时最容易翻车的五个误区这条主线用起来最大的阻力不是理解而是惯性。以下五个坑是我自己在期末复习和给同学讲题时反复见到的每一条都按“现象—原因—解决”写清楚。5.1 背了一堆公式却说不清每个公式回答哪个问题现象翻开讲义每个公式都认识合上之后题目一变就不会。明明背了贝叶斯公式遇到带损失矩阵的题却不知道要用最小风险。原因只记了公式形状没记输入、输出和使用条件。公式在讲义里有上下文但考试时上下文被抽走了只剩下题目条件。解决给每个公式做一张卡片写三行——解决什么问题、输入是什么、输出是什么、适用条件是什么。考前不看公式只看卡片能说出来就算过关。说不出来就回到相应章节不要急着刷题。5.2 最小错误率和最小风险混为一谈现象题目明确给了损失矩阵仍然取后验概率最大的类别最后算出来的答案和标准答案对不上。原因没有区分两个决策准则。最小错误率是贝叶斯决策的默认版最小风险是带代价的升级版两个公式长得像但决策依据不一样。解决看到“损失”“代价”字样走最小风险先算条件风险再选最小题目没提代价默认最小错误率。考场上一旦犹豫优先按“有损失矩阵就走风险”的原则处理。5.3 把 PCA 当特征选择投影方向还找反现象答题写“用 PCA 选择了两个特征”或者画 PCA 投影方向时选了方差最小的方向整个降维结果不可解释。原因混淆了特征选择与特征抽取也忘了 PCA 的目标是最大化方差。投影方向对应协方差矩阵的特征向量方差对应特征值找反方向等于把信息量少的轴留下了。解决先明确 PCA 输出的是新坐标轴方向不是原始特征子集。编程时看特征值排序取最大几个特征值对应的特征向量验证时打印 eigvals检查是否按从大到小排列。这一条在实验报告里尤其爱出。5.4 Parzen窗和k近邻被当成两个孤立算法现象两个算法都背了但问“什么时候用 Parzen 窗、什么时候用 k 近邻”时答不上来只觉得一个是窗、一个是邻居。原因没看到两者同属非参数密度估计。Parzen 窗用固定窗宽内的样本数估计密度k 近邻用固定近邻数自适应窗宽本质上都是“用样本估计类条件概率密度”这一大类的不同实现。解决把它们统一挂到模型层的“非参数密度估计”节点下再记各自的敏感参数Parzen 窗对窗宽敏感k 近邻对 k 值敏感。这样复习时只需要记两种策略怎么选而不是背两个孤立流程。5.5 K-means的K值靠猜聚类结果没法解释现象K 取多少没有依据出图不好看就换一个值直到某个 K 看起来“差不多对”。最终报告里写不出为什么选这个 K。原因缺少验证指标也忘了聚类结果要为下游任务服务。K-means 本身不告诉你 K 该取多少必须靠外部准则。解决用肘部法则画 K 值与簇内误差平方和的曲线找拐点。同时结合任务看每个簇的样本在特征上能不能说通如果一个簇里混着明显不该在一起的样本说明 K 偏小或者数据本身不适合 K-means。6. 把知识网跑起来一个自测框架和两个验证技巧6.1 三句话自测法任意抽一个知识点用三句话讲给自己听它回答什么问题、核心公式是什么、什么时候不能用。讲得出来才算真会讲不出来就回到对应章节的卡片。这个方法比刷题更快暴露盲区因为刷题时蒙对的也算对自测时只要嘴停住了就是真不会。6.2 用代码验证“串联”是否成立建议写三个小脚本手写高斯贝叶斯分类器、对数据做 PCA 并可视化、跑 K-means 看聚类中心。验证标准只有一个改一个参数能预判结果怎么变。改均值能预判决策面移动方向改 K 能预判簇数变化就算过关预判不了回去看公式。6.3 一张表挂回主线最后把整门课收进一张总表主线阶段核心知识点常见题型表示层PCA、LDA、特征选择计算投影方向、比较方差与可分性模型层高斯假设、极大似然估计、Parzen窗、k近邻估计参数、判断密度估计方法决策层贝叶斯决策、感知机、Fisher、SVM设计判别函数、比较算法与准则我自己当年考前是先背目录再逐章翻公式结果拿到综合题还是发懵因为脑子里全是孤立公式没有一根线把它们串起来。后来改成“先画主线再填知识点最后用三句话自测”复习效率明显比闷头刷题高。希望帮到你。本文还有配套的精品资源点击获取