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。
相关推荐
LabVIEW开发38 分钟前
LabVIEW 连接板:28 个端子怎么排,优先级怎么定
java·算法·labview
严肃小白兔2 小时前
MATLAB 数值计算中的精度与误差问题:浮点运算、误差传播与数值稳定性
人工智能·算法·matlab
青少儿编程课堂3 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛
jktantan4 小时前
注解式脱敏:用 Jackson 的 ContextualSerializer 做字段级策略(一)
spring boot·后端·算法·spring cloud·系统架构
Dream it possible!17 小时前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊17 小时前
算法之双指针系列(一)
算法·leetcode
十二17 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
小此方18 小时前
[算法实战论:动态规划]回文串问题的dp解法,回文串问题的母题,以及以此为基础的派生题
算法·动态规划
Pniubi19 小时前
力扣560.和为k的子数组
算法·leetcode·职场和发展
D e re k ZH19 小时前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法