LDA 协方差矩阵(MATLAB `fitcdiscr`)

LDA 协方差矩阵(MATLAB fitcdiscr)

Mdl.Sigma 与 Mdl.BetweenSigma 返回的都是协方差矩阵(已归一化),不是教材里的"散度矩阵(scatter matrix)"。二者只差一个常数缩放。

符号约定

符号 含义
KKK 类别数
nkn_knk 第 kkk 类样本数
NNN 总样本数,N=∑k=1KnkN=\sum_{k=1}^{K} n_kN=∑k=1Knk
pkp_kpk 经验类先验,pk=nk/Np_k = n_k / Npk=nk/N
μk\boldsymbol{\mu}_kμk 第 kkk 类均值
μ{\boldsymbol{\mu}}μ 全局均值,μ=∑k=1Kpkμk{\boldsymbol{\mu}} = \sum_{k=1}^{K} p_k \boldsymbol{\mu}_kμ=∑k=1Kpkμk

1. 类内协方差 Mdl.Sigma(pooled within-class)

无偏的合并类内协方差:

Σw=1N−K∑k=1K∑i∈Ck(xi−μk)(xi−μk)⊤=∑k=1Knk−1N−K Sk \boldsymbol{\varSigma}\mathrm {w} = \frac{1}{N-K}\sum{k=1}^{K}\sum_{i\in C_k} (\boldsymbol{x}_i-\boldsymbol{\mu}_k)(\boldsymbol{x}_i-\boldsymbol{\mu}k)^{\top} = \sum{k=1}^{K}\frac{n_k-1}{N-K}\,\boldsymbol{S}_k Σw=N−K1k=1∑Ki∈Ck∑(xi−μk)(xi−μk)⊤=k=1∑KN−Knk−1Sk

其中第 kkk 类无偏样本协方差为:

Sk=1nk−1∑i∈Ck(xi−μk)(xi−μk)⊤ \boldsymbol{S}k = \frac{1}{n_k-1}\sum{i\in C_k} (\boldsymbol{x}_i-\boldsymbol{\mu}_k)(\boldsymbol{x}_i-\boldsymbol{\mu}_k)^{\top} Sk=nk−11i∈Ck∑(xi−μk)(xi−μk)⊤

权重之和满足 ∑k=1Knk−1N−K=1\sum_{k=1}^{K}\dfrac{n_k-1}{N-K}=1∑k=1KN−Knk−1=1。

2. 类间协方差 Mdl.BetweenSigma

按各类样本量加权的类均值协方差,归一化分母取"无偏"形式:

Σb=∑k=1Knk (μk−μ)(μk−μ)⊤N(1−∑k=1Kpk2) \boldsymbol{\varSigma}\mathrm {b} = \frac{\displaystyle\sum{k=1}^{K} n_k\, (\boldsymbol{\mu}_k-{\boldsymbol{\mu}}) (\boldsymbol{\mu}k-{\boldsymbol{\mu}})^{\top}} {\displaystyle N\Bigl(1-\sum{k=1}^{K}p_k^{2}\Bigr)} Σb=N(1−k=1∑Kpk2)k=1∑Knk(μk−μ)(μk−μ)⊤

类别均衡时(nk=N/Kn_k = N/Knk=N/K,即 pk=1/Kp_k = 1/Kpk=1/K)化简为:

Σb=1K−1∑k=1K(μk−μ)(μk−μ)⊤ \boldsymbol{\varSigma}\mathrm {b} = \frac{1}{K-1}\sum{k=1}^{K} (\boldsymbol{\mu}_k-{\boldsymbol{\mu}}) (\boldsymbol{\mu}_k-{\boldsymbol{\mu}})^{\top} Σb=K−11k=1∑K(μk−μ)(μk−μ)⊤

它只取决于类样本量 ,与 Prior 设置无关(改先验不会改变它),且对 linear / quadratic 都会计算。

3. 与经典散度矩阵的关系

Sw=∑k=1K∑i∈Ck(xi−μk)(xi−μk)⊤=(N−K) ΣwSb=∑k=1Knk (μk−μ)(μk−μ)⊤=N(1−∑k=1Kpk2)ΣbST=Sw+Sb \begin{aligned} \boldsymbol{S}{\mathrm w} &= \sum{k=1}^{K}\sum_{i\in C_k} (\boldsymbol{x}i-\boldsymbol{\mu}k)(\boldsymbol{x}i-\boldsymbol{\mu}k)^{\top} = (N-K)\,\boldsymbol{\varSigma}\mathrm {w} \\4pt \boldsymbol{S}{\mathrm b} &= \sum{k=1}^{K} n_k\, (\boldsymbol{\mu}k-{\boldsymbol{\mu}}) (\boldsymbol{\mu}k-{\boldsymbol{\mu}})^{\top} = N\Bigl(1-\sum{k=1}^{K}p_k^{2}\Bigr)\boldsymbol{\varSigma}\mathrm {b} \\4pt \boldsymbol{S}T &= \boldsymbol{S}{\mathrm w}+\boldsymbol{S}{\mathrm b} \end{aligned} SwSbST=k=1∑Ki∈Ck∑(xi−μk)(xi−μk)⊤=(N−K)Σw=k=1∑Knk(μk−μ)(μk−μ)⊤=N(1−k=1∑Kpk2)Σb=Sw+Sb

4. MATLAB 中还原"教科书散度矩阵"

matlab 复制代码
K = numel(ldaModel.ClassNames);
N = size(data,1);
n_k = histcounts(y);            % 各类样本数(或用 groupsummary / accumarray)
p_k = n_k(:) / N;

Sw_scatter = ldaModel.Sigma       * (N - K);
Sb_scatter = ldaModel.BetweenSigma * (N * (1 - sum(p_k.^2)));

5. 两点提醒

  • 求投影方向时 Σw−1Σbw=λw\boldsymbol{\varSigma}\mathrm {w}^{-1}\boldsymbol{\varSigma}\mathrm {b}\boldsymbol{w}=\lambda\boldsymbol{w}Σw−1Σbw=λw 的特征向量对Σw\boldsymbol{\varSigma}\mathrm {w}Σw、Σb\boldsymbol{\varSigma}\mathrm {b}Σb 的常数缩放不敏感(只有特征值变化),因此直接用 Mdl.Sigma、Mdl.BetweenSigma 做特征分解与用散度矩阵Sw\boldsymbol{S}{\mathrm w}Sw、Sb\boldsymbol{S}{\mathrm b}Sb 得到的方向一致。
  • 形状随 DiscrimType 变化 :默认 'linear' 时 Sigma 为单个 p×pp\times pp×p 矩阵;'quadratic' 时为 p×p×Kp\times p\times Kp×p×K(每类一个),而 BetweenSigma 恒为单个 p×pp\times pp×p。
相关推荐
青少儿编程课堂1 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会C/C++考级:拓扑排序课程表排课解析
c++·python·算法·bfs·信息学竞赛
HPtiger11 小时前
数据结构——选择排序
数据结构·算法·排序算法
康实训11 小时前
老年评估仿真实训平台架构设计与老年人能力评估实训室教学落地实践
大数据·人工智能·算法·实训室·实训室建设
DongQiShanRen11 小时前
六根硬件映射(四):归属澄清、两处不一致与卷十一总表
开发语言·人工智能·算法·rust·哈希算法·集成学习
CCblandy11 小时前
雪花 ID 四个边界实测:时钟回拨重号 500 个,前端 JSON.parse 直接丢精度
后端·python·算法·性能优化·架构
丑梨数据11 小时前
信创环境里跑文档工具:格式兼容与本地合规的几个坑
数据结构·人工智能·算法·决策树·排序算法
erzong23113 小时前
Linux操作系统:线程概念与控制
linux·算法
Nil20814 小时前
leetcode 5最长回文子串
算法·leetcode·职场和发展
xxwl58514 小时前
区域赛分类题解
c++·笔记·学习·算法