资讯动态

降维决定分类上限:PCA与LDA在鸢尾花数据上的刀切法对比

发布时间:2026/10/27 21:42:11 来源:尧图企业网站定制
简介这份数理统计大作业文档面向统计学、机器学习方向的学生与自学者围绕经典鸢尾花数据集展开完整分析可作为课程作业参考或统计方法实践范本。压缩包内仅含1个docx文件约511KB以文字与公式推导为主涵盖摘要、符号说明、算法原理、数据处理与结果比对等章节结构完整便于按模块查阅。文档系统串联马氏距离、混合高斯模型、主成分分析、线性判别分析与刀切法等知识点先对四维花萼花瓣属性做清洗与变换再用主成分分析和线性判别分析降维去噪借助高斯混合模型在极大似然意义下聚类最后以刀切法比较降维方法与模型差异。已有1426人学习适合希望把课堂统计理论落到具体数据案例、理解降维与聚类取舍的读者参考借鉴。1. 四个特征、三个类别为什么降维这一步决定了整个分类管线的上限鸢尾花数据集只有 150 个样本、4 个特征、3 个类别很多人第一次跑分类时随手丢进一个分类器就能拿到 95% 以上的准确率于是得出一个结论这数据太简单没什么可研究的。但如果你把整条管线拆开看会发现真正决定结果的不是分类器本身而是降维那一步做了什么、丢掉了什么信息。这份数理统计大作业做的事情恰恰是把这条管线从马氏距离、高斯混合模型、主成分分析、线性判别分析一路拆到刀切法评估用一套完整的统计视角回答一个问题在有标签和无标签两种情况下降维到底改变了什么。搞懂这件事比记住几个 API 调用有价值得多因为它是维度规约、判别分析、模型评估这三块知识的交汇点也是很多人从“会调库”走向“知道为什么这么调”的分水岭。2. 马氏距离与高斯混合模型为什么距离度量必须先看协方差2.1 欧氏距离在相关特征上为什么会失效鸢尾花的四个特征——花萼长度、花萼宽度、花瓣长度、花瓣宽度——并不是相互独立的。花瓣长度和花萼长度之间存在明显的正相关量纲虽然都是厘米但方差差异不小。在这种数据上直接用欧氏距离衡量两个样本的相似度会出现一个反直觉的现象两个在“花瓣长度”上差很多但其他维度接近的样本可能比两个在每个维度上都差一点点的样本距离更近。原因在于欧氏距离把每个维度当成同等重要、彼此独立的轴而真实数据的协方差结构告诉我们的信息是某些方向上的变化是“正常波动”某些方向上的变化才是“异常”。马氏距离解决的正是这个问题。对于一个均值为 μ、协方差矩阵为 Σ 的多变量向量 x马氏距离定义为D²(x, μ) (x - μ)ᵀ Σ⁻¹ (x - μ)这里的 Σ⁻¹ 是关键。它相当于对数据做了一次白化变换先把坐标轴旋转到协方差矩阵的特征向量方向再按特征值的平方根缩放。变换之后原本被拉长的椭圆分布变成了标准圆欧氏距离才重新变得有意义。这份大作业里明确列出了马氏距离的三条性质当 Σ I 时退化为欧氏距离等价于标准化后的欧氏距离不受量纲变化影响。第三条尤其重要——如果四个特征一个用厘米、一个用毫米欧氏距离会完全被量纲大的维度主导而马氏距离天然免疫。常见的实现思路是先对协方差矩阵做 Cholesky 分解或直接求逆但要注意 Σ 可能接近奇异。鸢尾花数据 150 个样本、4 个维度协方差矩阵满秩没问题但如果换成高维小样本场景Σ⁻¹ 的数值稳定性就会翻车实践中一般加一个小的正则项或者用伪逆。2.2 高斯混合模型为什么它比 k-均值多考虑了“方向”k-均值聚类的隐含假设是每个簇是一个各向同性的球簇的形状由欧氏距离决定所有方向上的方差相同。这个假设在鸢尾花数据上直接失效Setosa 类在花瓣维度上非常紧凑而 Versicolour 和 Virginica 在花瓣长度和宽度上都有明显的沿对角线方向的延展。用一个球去套一个斜椭圆边界必然错得离谱。高斯混合模型的定义是若干高斯成分的加权和p(x) Σₖ πₖ · N(x | μₖ, Σₖ)与 k-均值相比GMM 多了两样东西每个成分有自己的协方差矩阵 Σₖ以及混合权重 πₖ。协方差矩阵允许每个簇在不同方向上有不同的方差并且刻画维度之间的相关性混合权重允许不同簇的样本比例不均衡。这两点让 GMM 在鸢尾花这种“类内方差方向不一致”的数据上明显更合适。参数估计走极大似然。对数似然函数是L(θ) Σᵢ log( Σₖ πₖ · N(xᵢ | μₖ, Σₖ) )直接对 θ 求导没有闭式解因为 log 里面还有一个求和。标准的做法是 EM 算法E 步计算每个样本属于每个成分的后验概率责任度M 步用加权样本重新估计 μₖ、Σₖ、πₖ交替迭代到收敛。这份大作业里写的是“在极大似然估计意义下求模型参数”实际落地时 EM 就是那条必经之路。提示GMM 对初始化敏感不同的初始均值可能收敛到不同的局部最优。鸢尾花三类的真实均值差异较大随机初始化多次取似然最大的那组是比较稳妥的做法。2.3 从密度到判别马氏距离怎么接上 GMMGMM 给出的是每个类的概率密度分类时需要把密度转成判别规则。一种直接的做法是对每个类拟合一个高斯成分或一组成分计算测试样本到各类均值在对应协方差下的马氏距离取距离最小的类。这本质上等价于在等先验、等代价假设下的最大似然判别。马氏距离在这里不是独立的模块而是 GMM 判别阶段的度量工具——协方差矩阵 Σₖ 就是 GMM 拟合出来的那个 Σₖ两者共用同一套参数。理解这一层衔接才能明白为什么大作业把马氏距离放在算法原理的第一节它是后面所有判别逻辑的距离基础。3. 主成分分析与线性判别分析有标签和无标签的降维差在哪3.1 PCA 的目标函数为什么是方差最大化主成分分析的出发点很朴素如果一组变量之间存在相关性说明它们反映的信息有重叠那就找一组新的正交基让投影后的变量两两不相关并且尽量保留原始信息。信息量用方差衡量所以目标就是让投影后的方差最大。设原始数据是 p 维要找线性变换 u使得投影 uᵀx 的方差最大max_u uᵀ Σ u s.t. uᵀu 1用拉格朗日乘子法一解结论是 u 必须是 Σ 的特征向量对应的方差就是特征值。第一主成分是最大特征值对应的特征向量第二主成分是第二大特征值对应的特征向量依此类推。降维就是只保留前 k 个特征向量把 p 维数据投影到 k 维子空间。这里有一个容易被忽略的细节PCA 对量纲敏感。如果四个特征的单位不同方差大的维度会主导主成分方向。大作业里明确写了“利用相关矩阵代替协方差矩阵即可消除量纲的影响”——相关矩阵相当于先对每个维度做标准化再算协方差这是 PCA 预处理的标准动作。鸢尾花四个特征虽然都是厘米但方差差异仍然存在用相关矩阵更稳妥。PCA 的核心局限在于它完全不知道标签的存在。它找的是数据整体方差最大的方向而这个方向未必是区分类别最好的方向。在鸢尾花数据上方差最大的方向很可能主要由 Setosa 和其他两类的差异贡献但 Versicolour 和 Virginica 之间的区分信息可能落在方差较小的方向上被 PCA 直接丢掉了。3.2 LDA 的类间散度与类内散度为什么它“看见”了标签线性判别分析的思路完全不同它要在投影之后让同类样本尽量聚拢、异类样本尽量分开。用两个散度矩阵来量化这个目标S_w Σₖ Σ_{x∈Cₖ} (x - μₖ)(x - μₖ)ᵀ # 类内散度 S_b Σₖ nₖ (μₖ - μ)(μₖ - μ)ᵀ # 类间散度S_w 衡量每个类内部的紧凑程度S_b 衡量各类均值相对全局均值的分散程度。Fisher 判别准则就是找一个投影方向 u使得投影后的类间散度与类内散度之比最大max_u (uᵀ S_b u) / (uᵀ S_w u)这个比值叫广义瑞利商它的解是 S_w⁻¹ S_b 的特征向量。投影方向由 S_w⁻¹ S_b 的最大特征值对应的特征向量给出。直观理解S_w⁻¹ 相当于先把类内方差“压平”在这个变换后的空间里S_b 的最大方向就是类间差异最显著的方向。与 PCA 对比LDA 多用了标签信息所以它优化的目标直接对准分类任务而不是数据重构。大作业里写“LDA 利用了标签信息比 PCA 利用了更多的有效信息因此理论上讲比 PCA 降维效果要更好一些”这句话的底层依据就是目标函数的不同PCA 最大化总方差LDA 最大化类间/类内比。在有标签的场景下后者显然更贴近判别需求。但 LDA 也有自己的约束降维后的维度最多是 min(p, K-1)K 是类别数。鸢尾花三类LDA 最多降到 2 维。这不是实现限制而是数学上的秩约束——S_b 的秩不超过 K-1超过这个维度的方向不携带任何类间区分信息。3.3 降维即去噪为什么这一步同时改变了 GMM 的输入分布大作业里有一句话值得单独拎出来“采用主成分分析和线性判别分析将之降维这同时也是去噪的过程。”降维为什么等于去噪因为被丢弃的那些方向在统计意义上对应的是方差小、信息量低的分量其中往往混杂着测量误差和样本波动。把这些方向砍掉相当于对数据做了一次低通滤波。但要注意PCA 和 LDA 去噪的“标准”不一样。PCA 丢掉的是总方差小的方向LDA 丢掉的是类间区分能力弱的方向。在鸢尾花数据上这两种标准可能导致不同的保留维度PCA 可能保留一个方差大但主要反映 Setosa 与其他类差异的方向而 LDA 会优先保留能分开 Versicolour 和 Virginica 的方向。降维后的数据再喂给 GMM聚类的效果自然不同——这就是后面刀切法要量化比较的东西。常见的实现思路是把降维和聚类串成一条管线先 fit 降维器transform 数据再在低维空间上 fit GMM。这里有一个容易踩的坑降维器必须在训练集上 fit测试集只能 transform否则信息泄漏刀切法评估出来的结果会虚高。4. 刀切法为什么留一法能给出更诚实的性能估计4.1 回报法、交叉验证与留一法的本质区别模型评估的核心问题是用训练数据估出来的误差能不能代表模型在未见数据上的误差回报法resubstitution直接用训练集上的判错率当性能指标问题是它严重乐观——模型见过这些样本判错率天然偏低。k 折交叉验证把数据分成 k 份轮流留一份做测试缓解了这个问题但每次训练只用了 (k-1)/k 的数据训练集规模与最终模型不一致。刀切法jackknife也叫留一法leave-one-out是 k 折交叉验证的极端情况k 等于样本数 n每次只留一个样本做测试其余 n-1 个训练。它的好处是训练集规模几乎等于全量数据偏差最小代价是要训练 n 次计算量大。大作业里写“刀切法测试效果优于回报法和交叉验证法虽然运算量相对很大但是在计算机辅助下还是比较容易实现的”说的就是这个取舍。刀切法的步骤可以概括为for 每个样本 i: 用除 i 以外的所有样本训练判别规则 用该规则预测样本 i 记录预测是否正确 判错率 判错个数 / 总样本数在鸢尾花数据上n150意味着要完整跑 150 次“降维 GMM 拟合 判别”。如果每次还要做 EM 迭代计算量确实不小但 150 个样本、4 维数据现代机器上完全跑得动。4.2 用刀切法比较 PCA 与 LDA降维程度怎么选这份大作业用刀切法做了一件很有价值的事不是只比较“PCA vs LDA”而是比较不同降维程度下的表现。PCA 可以保留 1、2、3 个主成分LDA 最多保留 2 个判别方向每一种组合都跑一遍留一法得到一张判错率随维度变化的表。这张表回答的问题是降维到几维时分类性能最好直觉上维度越高信息越多但实际往往不是。维度增加会引入噪声维度GMM 的参数估计在更高维空间里也更不稳定协方差矩阵的参数数量随维度平方增长。所以判错率曲线常常是 U 形的太低维欠拟合太高维过拟合中间某个点最优。刀切法的作用就是把这条曲线画出来让“降维程度”这个超参数有据可依而不是拍脑袋。注意留一法在类别不均衡时单样本测试的方差较大。鸢尾花三类各 50 个样本均衡性很好这个问题不突出换成不均衡数据最好配合分层策略或重复多次。4.3 计算代价与实现细节150 次循环里藏着的坑留一法的实现看起来简单但有几个细节会直接影响结果的可信度。第一每次循环里的标准化、PCA/LDA 的 fit 都必须只用训练折的数据测试样本只能 transform。如果图省事在全量数据上先 fit 一次降维器再循环信息泄漏会让判错率偏低这个坑非常隐蔽。第二GMM 的 EM 初始化如果每次随机150 次循环之间的结果波动会掩盖方法之间的真实差异实践中要么固定随机种子要么多次初始化取最优。第三判别阶段用马氏距离时协方差矩阵必须来自当前训练折拟合的 GMM不能复用全量数据的协方差。这些细节在论文里往往一笔带过但它们决定了刀切法给出的数字到底可不可信。血泪经验是任何涉及“留出”的评估先把数据切分逻辑写对再谈模型。5. 避坑与排查这条统计管线最容易翻车的五个地方5.1 现象PCA 降维后分类效果反而变差原因没有对数据做标准化方差大的特征主导了主成分方向真正的判别信息被挤到后面的成分里丢掉了。解决用相关矩阵代替协方差矩阵或者在 PCA 之前对每个特征做 z-score 标准化。鸢尾花四个特征量纲相同但方差不同这一步不能省。5.2 现象GMM 拟合时协方差矩阵报奇异或接近奇异原因某个高斯成分分到的样本太少或者维度相对样本数太高Σₖ 不满秩。解决给协方差矩阵加一个小的对角正则项如 1e-6 倍单位阵或者限制协方差矩阵为对角形式。降维本身也是缓解手段——这正是先降维再聚类的动机之一。5.3 现象留一法算出来的判错率异常低低到不合理原因信息泄漏。降维器、标准化参数、GMM 参数在全量数据上拟合后又被用于“测试”单个样本。解决把 fit 严格放进循环内部每次只用 n-1 个样本。检查方法是故意打乱标签再跑一遍如果判错率还是异常低说明泄漏没修干净。5.4 现象LDA 降维维度设成 3 维时报错或结果异常原因LDA 的降维上限是 min(p, K-1)三类数据最多 2 维S_b 的秩不够。解决把 n_components 限制在 K-1 以内。这不是 bug是判别分析的数学约束理解秩约束就不会再踩。5.5 现象同一份代码多次运行GMM 聚类结果不稳定原因EM 对初始均值敏感随机初始化可能收敛到不同的局部最优。解决固定随机种子或者跑多次初始化取对数似然最大的那组参数。在刀切法循环里尤其要注意每次循环的初始化策略要一致否则方法之间的比较失去意义。6. 设计取舍为什么这套管线选择“先降维、再聚类、后评估”的顺序把整条管线串起来看顺序不是随意排的马氏距离提供距离度量PCA/LDA 做维度规约和去噪GMM 在低维空间做密度建模和聚类刀切法给出诚实的性能估计。这个顺序背后有三个明确的取舍。第一个取舍是降维放在聚类之前。GMM 的参数数量随维度平方增长4 维时每个成分的协方差矩阵有 10 个自由参数看起来不多但样本分到每个成分后实际可用样本有限高维下估计方差大。先降到 1 到 2 维参数估计稳定得多代价是可能丢掉一些微弱但有用的判别信息。这个取舍在鸢尾花数据上划算因为主要判别信息集中在前几个主成分/判别方向上。第二个取舍是 PCA 与 LDA 并列比较而不是二选一。PCA 不需要标签适用面广LDA 需要标签但在有标签时目标更对准分类。大作业用刀切法把两者在不同维度下的判错率都跑出来本质上是把“用哪个”变成数据驱动的问题而不是先验地站队。这种并列比较的思路比直接说“LDA 更好”更有说服力。第三个取舍是评估方法选留一法而不是 k 折。150 个样本的规模下留一法的计算量可以接受换来的是训练集规模最大化、偏差最小。如果数据量上升到几万留一法就不现实了那时 5 折或 10 折交叉验证是更合理的选择。方法的选择永远跟数据规模挂钩没有普适的最优。环节方法关键参数主要风险距离度量马氏距离协方差矩阵 ΣΣ 奇异降维无监督PCA保留主成分数 k未标准化导致方向偏移降维有监督LDA保留判别方向数 ≤ K-1超出秩约束聚类/密度建模GMM EM成分数、初始化局部最优、Σ 奇异性能评估刀切法无信息泄漏如果想验证这套管线是否真的按预期工作一个简单的自检方法是先用已知标签算一遍 LDA 降维后的类间分离度再对比 PCA 降维后的分离度如果 LDA 的分离度没有明显更高说明标签信息没有被正确利用回头检查 fit 的数据里标签有没有对齐。另一个自检是打乱标签重跑判错率应该退化到接近随机猜测三类约 67% 错判如果还是很低泄漏无疑。我自己的习惯是任何带“留出”评估的统计管线先把数据切分和 fit/transform 的边界画清楚再动模型参数。从那以后我每次搭这类管线都强制先跑一遍打乱标签的 sanity check确认评估逻辑本身没毛病再去调降维维度和聚类成分数。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑