403 lines
18 KiB
Markdown
403 lines
18 KiB
Markdown
既然你想要更硬核的计算细节,我们直接切入核心。协方差矩阵不仅是统计工具,它在降维(PCA)、信号处理以及你感兴趣的 AI 算法中都是灵魂。
|
||
|
||
---
|
||
|
||
## 一、 协方差矩阵:深度定义与公式
|
||
|
||
### 1. 理论定义
|
||
|
||
对于两个随机变量 $X$ 和 $Y$,其**协方差**定义为:
|
||
|
||
$$\text{cov}(X, Y) = E[(X - E[X])(Y - E[Y])]$$
|
||
|
||
它衡量的是两个变量变化的**同步性**:同时变大/变小则为正,反向变化则为负。
|
||
|
||
### 2. 矩阵定义
|
||
|
||
对于一个 $p$ 维随机向量 $\mathbf{X} = [X_1, X_2, \dots, X_p]^\top$,协方差矩阵 $\boldsymbol{\Sigma}$ 的第 $i$ 行第 $j$ 列元素就是 $\text{cov}(X_i, X_j)$:
|
||
|
||
$$\boldsymbol{\Sigma} = \begin{bmatrix} \text{var}(X_1) & \text{cov}(X_1, X_2) & \dots \\ \text{cov}(X_2, X_1) & \text{var}(X_2) & \dots \\ \vdots & \vdots & \ddots \end{bmatrix}$$
|
||
|
||
### 3. 实际计算公式(离散样本)
|
||
|
||
假设你的样本数据矩阵为 $\mathbf{D}_{N \times p}$($N$ 个样本,$p$ 个特征):
|
||
|
||
1. **中心化处理**:计算每一列的均值,并让数据减去均值,得到中心化矩阵 $\mathbf{X}$。
|
||
|
||
2. **矩阵乘法**:
|
||
|
||
$$\hat{\boldsymbol{\Sigma}} = \frac{1}{N-1} \mathbf{X}^\top \mathbf{X}$$
|
||
|
||
_注意:分母使用 $N-1$ 是为了保证无偏估计(贝塞尔修正)。_
|
||
|
||
|
||
---
|
||
|
||
## 二、 核心性质
|
||
|
||
- **半正定性**:$\mathbf{a}^\top \boldsymbol{\Sigma} \mathbf{a} \ge 0$。这意味着在任何方向上的“方差”投影都不可能为负数。
|
||
|
||
- **行列式含义**:$\det(\boldsymbol{\Sigma})$ 被称为“广义方差”,代表了数据在空间中分布的体积。
|
||
|
||
- **迹 (Trace)**:$\text{tr}(\boldsymbol{\Sigma}) = \sum \lambda_i$(特征值之和),等于所有原始特征的方差总和。
|
||
|
||
|
||
---
|
||
|
||
## 三、 实例计算:以“COW”数据为例
|
||
|
||
假设我们观测了 3 头牛(Sample)的两个特征:**体重 (Weight, $x_1$)** 和 **产奶量 (Milk, $x_2$)**。
|
||
|
||
### 1. 原始数据矩阵 $\mathbf{D}$ ($N=3, p=2$)
|
||
|
||
|**样本 (Cow)**|**体重 (x1)**|**产奶量 (x2)**|
|
||
|---|---|---|
|
||
|Cow 1|60|20|
|
||
|Cow 2|50|30|
|
||
|Cow 3|70|25|
|
||
|
||
$$\mathbf{D} = \begin{bmatrix} 60 & 20 \\ 50 & 30 \\ 70 & 25 \end{bmatrix}$$
|
||
|
||
### 2. 计算步骤
|
||
|
||
**第一步:计算列均值**
|
||
|
||
- $\bar{x}_1 = (60+50+70)/3 = 60$
|
||
|
||
- $\bar{x}_2 = (20+30+25)/3 = 25$
|
||
|
||
|
||
**第二步:中心化矩阵 $\mathbf{X}$ (减去均值)**
|
||
|
||
$$\mathbf{X} = \begin{bmatrix} 60-60 & 20-25 \\ 50-60 & 30-25 \\ 70-60 & 25-25 \end{bmatrix} = \begin{bmatrix} 0 & -5 \\ -10 & 5 \\ 10 & 0 \end{bmatrix}$$
|
||
|
||
**第三步:计算 $\mathbf{X}^\top \mathbf{X}$**
|
||
|
||
$$\mathbf{X}^\top \mathbf{X} = \begin{bmatrix} 0 & -10 & 10 \\ -5 & 5 & 0 \end{bmatrix} \begin{bmatrix} 0 & -5 \\ -10 & 5 \\ 10 & 0 \end{bmatrix}$$
|
||
|
||
- 左上:$(0^2 + (-10)^2 + 10^2) = 200$
|
||
|
||
- 右上/左下:$(0 \cdot (-5) + (-10) \cdot 5 + 10 \cdot 0) = -50$
|
||
|
||
- 右下:$((-5)^2 + 5^2 + 0^2) = 50$
|
||
|
||
|
||
得到结果矩阵:
|
||
|
||
$$\mathbf{X}^\top \mathbf{X} = \begin{bmatrix} 200 & -50 \\ -50 & 50 \end{bmatrix}$$
|
||
|
||
**第四步:除以 $N-1$ ($3-1=2$)**
|
||
|
||
$$\hat{\boldsymbol{\Sigma}} = \frac{1}{2} \begin{bmatrix} 200 & -50 \\ -50 & 50 \end{bmatrix} = \begin{bmatrix} 100 & -25 \\ -25 & 25 \end{bmatrix}$$
|
||
|
||
### 3. 结果解读
|
||
|
||
- **体重方差** 为 100。
|
||
|
||
- **产奶量方差** 为 25。
|
||
|
||
- **协方差** 为 -25。
|
||
|
||
- **结论**:在这个极小的样本中,体重和产奶量成**负相关**(体重越大的牛产奶反而少了),这可能是数据量太少导致的偶然,也正是 $p \gg N$ 时我们需要警惕的“虚假相关性”。
|
||
|
||
|
||
---
|
||
|
||
## 四、 在你的“高维”语境下的思考
|
||
|
||
对于你提到的 **对角线判断准则**,在处理上面的“COW”矩阵时,它会强行把 `-25` 抹去,只留下:
|
||
|
||
$$\hat{\boldsymbol{\Sigma}}_{\text{diag}} = \begin{bmatrix} 100 & 0 \\ 0 & 25 \end{bmatrix}$$
|
||
|
||
在你的 $p \gg N$ 场景下,特征间的相关性(如上面的 -25)极不稳定。如果特征增加到数千个,这些非对角线元素的累积误差会摧毁你的线性判别模型(LDA)。因此,抹去它们(对角线准则)或向 0 收缩(最近收缩重心法)不仅是数学上的妥协,更是一种通过**增加偏置来换取稳定性**的高明策略。
|
||
|
||
---
|
||
|
||
在统计学和机器学习中,当特征维度 $p$ 远大于样本量 $N$ 时(即 $p \gg N$),我们称之为**高维数据问题**。在这种情况下,传统的统计方法(如样本协方差矩阵的逆)会失效。
|
||
|
||
以下是按照你的要求进行的详细分析。
|
||
|
||
---
|
||
|
||
## 一、 协方差矩阵的定义与性质
|
||
|
||
在深入讨论高维策略前,我们需要明确协方差矩阵这一核心工具。
|
||
|
||
### 1. 定义与公式
|
||
|
||
假设我们有随机向量 $\mathbf{X} = [X_1, X_2, \dots, X_p]^\top$,其均值向量为 $\boldsymbol{\mu} = E[\mathbf{X}]$。
|
||
|
||
**协方差矩阵** $\boldsymbol{\Sigma}$ 定义为:
|
||
|
||
$$\boldsymbol{\Sigma} = E[(\mathbf{X} - \boldsymbol{\mu})(\mathbf{X} - \boldsymbol{\mu})^\top]$$
|
||
|
||
对于观测到的样本数据矩阵 $\mathbf{X}_{N \times p}$(假设已做中心化处理,即每列均值为0),其**样本协方差矩阵** $\hat{\boldsymbol{\Sigma}}$ 为:
|
||
|
||
$$\hat{\boldsymbol{\Sigma}} = \frac{1}{N-1} \mathbf{X}^\top \mathbf{X}$$
|
||
|
||
其中 $\hat{\boldsymbol{\Sigma}}$ 是一个 $p \times p$ 的对称矩阵,其元素 $\sigma_{ij}$ 表示第 $i$ 个特征与第 $j$ 个特征之间的协方差。
|
||
|
||
### 2. 核心性质
|
||
|
||
- **对称性**:$\boldsymbol{\Sigma} = \boldsymbol{\Sigma}^\top$。
|
||
|
||
- **半正定性**:对于任意非零向量 $\mathbf{v}$,有 $\mathbf{v}^\top \boldsymbol{\Sigma} \mathbf{v} \ge 0$。这保证了特征值非负。
|
||
|
||
- **对角线元素**:$\sigma_{ii} = \text{Var}(X_i)$,即各特征的方差。
|
||
|
||
- **高维下的奇异性**:**这是关键点。** 当 $p > N$ 时,$\hat{\boldsymbol{\Sigma}}$ 的秩 $\text{rank}(\hat{\boldsymbol{\Sigma}}) \le \min(N-1, p)$。因此,$\hat{\boldsymbol{\Sigma}}$ 是**奇异矩阵(不可逆)**,其最小的 $p-N+1$ 个特征值均为 0。
|
||
|
||
|
||
---
|
||
|
||
## 二、 当 $p \gg N$ 时的对角线判断准则 (Diagonal Discriminant Analysis)
|
||
|
||
在高维情况下,由于样本不足以估计特征间的相关性(非对角线元素),传统的线性判别分析(LDA)会因为判别式中涉及 $\hat{\boldsymbol{\Sigma}}^{-1}$ 而崩溃。
|
||
|
||
### 1. 核心思想
|
||
|
||
**对角线判断准则**(也称为对角线性判别分析,DLDA)采取了一种极端的简化:假设各特征之间相互独立。这意味着我们将协方差矩阵中的所有非对角线元素强行置为 0。
|
||
|
||
### 2. 数学表达
|
||
|
||
我们只保留 $\hat{\boldsymbol{\Sigma}}$ 的对角线:
|
||
|
||
$$\hat{\boldsymbol{\Sigma}}_{\text{diag}} = \text{diag}(\hat{s}_1^2, \hat{s}_2^2, \dots, \hat{s}_p^2)$$
|
||
|
||
其中 $\hat{s}_j^2$ 是第 $j$ 个特征的样本方差。
|
||
|
||
### 3. 为什么有效?
|
||
|
||
虽然“特征独立”的假设在现实中往往不成立,但在 $p \gg N$ 时,估计 $p(p-1)/2$ 个相关性系数带来的**方差(Variance)**远大于忽略它们带来的**偏置(Bias)**。通过放弃相关性,我们避免了矩阵求逆的病态问题,模型反而更稳健。
|
||
|
||
---
|
||
|
||
## 三、 最近收缩重心法 (Nearest Shrunken Centroids, NSC)
|
||
|
||
NSC 是对上述对角线准则的进一步优化,由 Tibshirani 等人提出(常用于基因芯片数据分析)。它不仅解决了高维问题,还自带**特征选择**功能。
|
||
|
||
### 1. 核心逻辑:收缩 (Shrinkage)
|
||
|
||
在传统的重心分类法中,我们将样本划归到与其均值(重心)最近的那一类。而在 NSC 中,我们将每个类的重心向“全局重心”进行收缩。
|
||
|
||
### 2. 算法步骤
|
||
|
||
1. **标准化距离**:计算第 $k$ 类中第 $j$ 个特征的重心 $d_{kj}$ 与全局重心 $\bar{x}_j$ 的偏离程度。
|
||
|
||
2. **软阈值收缩 (Soft Thresholding)**:
|
||
|
||
$$d'_{kj} = \text{sign}(d_{kj})(|d_{kj}| - \Delta)_+$$
|
||
|
||
其中 $\Delta$ 是阈值参数。如果某个特征的偏离程度小于 $\Delta$,它的偏移量就会变成 0。
|
||
|
||
3. **特征过滤**:如果一个特征在所有类别中的 $d'_{kj}$ 都缩减为 0,说明该特征对分类没有贡献,直接剔除。
|
||
|
||
|
||
### 3. 优势
|
||
|
||
- **稀疏性**:在大规模特征中自动筛选出真正有差异的特征。
|
||
|
||
- **抗噪能力**:通过减小噪声特征的影响,提升了模型在 $p \gg N$ 场景下的泛化能力。
|
||
|
||
|
||
---
|
||
|
||
## 四、 总结:应对 $p \gg N$ 的策略
|
||
|
||
当你在开发系统(比如你之前涉及的 AI 决策模型或 Rust 性能分析)中遇到高维特征瓶颈时,可以参考以下路径:
|
||
|
||
1. **正则化 (Regularization)**:给协方差矩阵加上一个扰动,如 $\hat{\boldsymbol{\Sigma}}_{new} = (1-\alpha)\hat{\boldsymbol{\Sigma}} + \alpha \mathbf{I}$。这在数学上保证了矩阵可逆且稳定。
|
||
|
||
2. **空间转换**:使用 PCA(主成分分析)将 $p$ 维映射到 $N$ 维以下的子空间,在子空间内计算协方差。
|
||
|
||
3. **模型简化**:如上所述,使用 **DLDA** 忽略相关性,或使用 **NSC** 进行特征收缩与选择。
|
||
|
||
|
||
这些方法本质上都是在**偏差-方差权衡 (Bias-Variance Tradeoff)** 中,通过引入一定的偏差(假设独立或收缩重心)来大幅降低高维估计带来的巨大方差。
|
||
|
||
---
|
||
|
||
在高维数据处理中,当 $p \gg N$ 时,正如我们之前讨论的,样本协方差矩阵 $\hat{\boldsymbol{\Sigma}}$ 会变得**奇异(Singular)**,导致无法求逆。
|
||
|
||
为了解决这个问题,我们会引入**正则化(Regularization)**。在分类器语境下,你提到的“一次”和“二次”正则化,通常对应于线性判别分析(LDA)与 **L1 (Lasso)** 和 **L2 (Ridge)** 惩罚项的结合。
|
||
|
||
---
|
||
|
||
## 一、 二次正则线性分类器 (L2 Regularized LDA / Ridge LDA)
|
||
|
||
这在统计学中通常被称为 **常规判别分析 (Regularized Discriminant Analysis, RDA)** 或 **岭判别分析**。
|
||
|
||
### 1. 核心数学逻辑
|
||
|
||
既然 $\hat{\boldsymbol{\Sigma}}$ 不可逆,我们人为地给它的对角线加上一个“保护项”:
|
||
|
||
$$\hat{\boldsymbol{\Sigma}}_{\text{ridge}} = \hat{\boldsymbol{\Sigma}} + \lambda \mathbf{I}$$
|
||
|
||
其中 $\lambda > 0$ 是正则化参数,$\mathbf{I}$ 是单位矩阵。
|
||
|
||
### 2. 对判别函数的影响
|
||
|
||
在线性判别分析中,分类决策取决于判别得分 $\delta_k(x)$。引入 L2 正则后:
|
||
|
||
$$\delta_k(x) = x^\top (\hat{\boldsymbol{\Sigma}} + \lambda \mathbf{I})^{-1} \hat{\mu}_k - \frac{1}{2} \hat{\mu}_k^\top (\hat{\boldsymbol{\Sigma}} + \lambda \mathbf{I})^{-1} \hat{\mu}_k + \log \pi_k$$
|
||
|
||
### 3. 特点与直觉
|
||
|
||
- **数学稳定性**:加上 $\lambda \mathbf{I}$ 后,矩阵的所有特征值都增加了 $\lambda$,确保了矩阵严格正定,从而**可逆**。
|
||
|
||
- **收缩效果**:它将特征间的协方差推向 0,并将特征自身的方差推向一致。
|
||
|
||
- **非稀疏性**:二次正则会**保留所有特征**,只是减小了系数的绝对值。如果你认为所有特征都对模型有微小贡献,这非常有效。
|
||
|
||
|
||
---
|
||
|
||
## 二、 一次正则线性分类器 (L1 Regularized LDA / Sparse LDA)
|
||
|
||
当 $p$ 达到成千上万(如基因数据或大规模文本)时,我们不仅需要模型稳定,还需要**特征选择**。这时就需要一次正则化。
|
||
|
||
### 1. 核心数学逻辑
|
||
|
||
一次正则(L1)利用了 $L_1$ 范数的“角点”特性,倾向于产生**稀疏解**。在 LDA 的背景下,这通常转化为一个带约束的优化问题:
|
||
|
||
$$\min_{\beta} \{ \beta^\top \hat{\boldsymbol{\Sigma}} \beta - 2\beta^\top \mu_k + \gamma \|\beta\|_1 \}$$
|
||
|
||
其中 $\|\beta\|_1 = \sum |\beta_j|$ 是系数的绝对值之和。
|
||
|
||
### 2. 与“最近收缩重心法 (NSC)”的关系
|
||
|
||
我们在上一次回答中提到的 **最近收缩重心法 (NSC)** 实际上可以看作是一次正则线性分类器的一种特殊、简化的形式。
|
||
|
||
- **NSC** 假设协方差是对角阵,并在重心上做软阈值收缩。
|
||
|
||
- **一次正则 LDA** 则在考虑(部分)特征相关性的同时,强制让不重要的特征系数 $\beta_j$ 变为 **0**。
|
||
|
||
|
||
### 3. 特点与直觉
|
||
|
||
- **自动特征选择**:它能直接告诉你哪些特征是“废话”,哪些是关键。
|
||
|
||
- **模型可解释性**:输出的模型只包含少数非零系数,非常适合科学研究(如寻找致病基因)。
|
||
|
||
|
||
---
|
||
|
||
## 三、 对比总结
|
||
|
||
|**特性**|**二次正则 (L2 / Ridge)**|**一次正则 (L1 / Lasso)**|
|
||
|---|---|---|
|
||
|**数学手段**|$\hat{\boldsymbol{\Sigma}} + \lambda \mathbf{I}$|增加 $\\|\beta\\|$ 惩罚项|
|
||
|**对特征的处理**|压缩系数,保留所有特征|强制部分系数归零(稀疏化)|
|
||
|**计算复杂度**|较低(矩阵求逆/分解)|较高(通常需要迭代优化)|
|
||
|**适用场景**|特征间普遍存在弱相关性|特征中存在大量噪声或无关变量|
|
||
|**几何直观**|将估计值拉向原点,圆球状约束|将估计值拉向轴线,菱形约束|
|
||
|
||
---
|
||
|
||
## 四、 针对你的背景建议
|
||
|
||
如果你在处理类似 **HIS-GUI 系统中的诊疗数据分类** 或者 **EzVibe 中的图像特征识别**:
|
||
|
||
1. 如果你的特征维度 $p$ 只是几百,且特征都有意义,首选 **二次正则**,因为它利用了更多信息。
|
||
|
||
2. 如果你面临的是海量、未经筛选的原始特征(例如直接对像素或原始信号建模),**一次正则** 更优,因为它能帮你自动剔除无效的噪声维度。
|
||
|
||
|
||
你想针对这两者中的哪一种进行更深层的数学公式推导(比如 KKT 条件),还是看更具体的算法实现逻辑?
|
||
|
||
---
|
||
|
||
当特征“不可用”时,通常指特征维度极高、质量极差(噪声大)或存在严重的共线性,导致常规模型完全无法收敛。在这种情况下,我们需要从“数据重构”和“统计严谨性”两个维度入手。
|
||
|
||
以下是针对你提到的**有监督主成分**、**特征评估**和**多重检验**的详细方案:
|
||
|
||
---
|
||
|
||
## 一、 特征不可用时的对策:有监督主成分分析 (Supervised PCA)
|
||
|
||
传统的 PCA 是无监督的,它只寻找方差最大的方向,但方差大的方向不一定对预测分类有用。**有监督主成分分析** 专门解决 $p \gg N$ 且特征杂乱的问题。
|
||
|
||
### 1. 执行步骤
|
||
|
||
1. **单变量筛选**:计算每个特征 $x_j$ 与目标变量 $y$ 的关联程度(如计算简单的相关系数或 $t$ 统计量)。
|
||
|
||
2. **阈值过滤**:设定阈值 $\theta$,仅保留关联程度绝对值大于 $\theta$ 的特征子集。
|
||
|
||
3. **主成分提取**:对这个**筛选后**的特征子集进行 PCA 降维。
|
||
|
||
4. **建模**:用提取出的主成分(Principal Components)作为输入,运行线性回归或分类器。
|
||
|
||
|
||
### 2. 为什么有效?
|
||
|
||
它过滤掉了那些虽然波动大(方差大)但与预测目标无关的“干扰噪声”,在 $p \gg N$ 的生物信息学和金融建模中非常经典。
|
||
|
||
---
|
||
|
||
## 二、 特征评估 (Feature Evaluation)
|
||
|
||
在高维语境下,评估特征不能只看准确率,需要多维度考量:
|
||
|
||
### 1. 过滤式评估 (Filter Methods)
|
||
|
||
利用统计指标直接给特征打分。
|
||
|
||
- **F-score / Mutual Information**:衡量特征与标签之间的信息增益。
|
||
|
||
- **变异系数 (CV)**:评估特征在不同样本间的稳定性。
|
||
|
||
|
||
### 2. 嵌入式评估 (Embedded Methods)
|
||
|
||
利用你之前提到的**正则化分类器**(如 Lasso)。
|
||
|
||
- **特征权重 (Weights)**:在 L1 正则下,系数不为 0 的特征即为选中的特征。系数的绝对值大小代表了其重要程度。
|
||
|
||
|
||
---
|
||
|
||
## 三、 多重检验 (Multiple Testing)
|
||
|
||
这是高维统计中最容易踩坑的地方。当你测试 10,000 个特征时,即使全是噪声,按照 $p < 0.05$ 的标准,也会有 500 个特征由于“纯属巧合”而显得显著。这就是**多重比较问题**。
|
||
|
||
### 1. 错误发现率 (FDR, False Discovery Rate)
|
||
|
||
这是目前最主流的方法,通过 **Benjamini-Hochberg (BH)** 过程控制假阳性的比例。
|
||
|
||
- **逻辑**:不要求“一个错误都不犯”,而是要求在所有判定为显著的特征中,错误的比例控制在一定水平(如 5%)。
|
||
|
||
|
||
### 2. 邦费罗尼修正 (Bonferroni Correction)
|
||
|
||
- **方法**:极其严格。将显著性阈值设为 $\alpha / p$。
|
||
|
||
- **例子**:如果你有 1000 个特征,要求整体显著性 $\alpha = 0.05$,则单个特征必须满足 $p < 0.00005$。
|
||
|
||
- **缺点**:太保守,容易杀掉真正的有效特征(漏诊)。
|
||
|
||
|
||
---
|
||
|
||
## 四、 综合处理流程建议
|
||
|
||
如果你在处理类似 **HIS 项目** 中的复杂医疗指标或 **EzVibe** 的高维传感器数据,建议流程如下:
|
||
|
||
### 步骤表:从原始数据到可靠结论
|
||
|
||
|**阶段**|**执行动作**|**核心目的**|
|
||
|---|---|---|
|
||
|**预处理**|缺失值归一化 + 异常值检测|确保特征“可用”|
|
||
|**初步筛选**|计算单变量 $p$-value 并进行 **BH 修正 (FDR)**|剔除纯随机噪声特征|
|
||
|**维度压缩**|运行 **Supervised PCA**|将高维稀疏特征浓缩为低维稠密信号|
|
||
|**核心建模**|使用 **L2 正则线性分类器**|在降维后的空间内进行稳定分类|
|
||
|**最终验证**|交叉验证 (Cross-validation)|确保模型不是在“背诵”数据(防止过拟合)|
|
||
|
||
---
|
||
|
||
### 💡 避坑指南
|
||
|
||
在高维场景下,**绝对不要先在全量数据上选特征,然后再做交叉验证。**
|
||
|
||
这会导致“训练集信息泄露”。正确的做法是:在交叉验证的**每一个 Fold 内部**重新执行“特征筛选 + PCA + 建模”的全过程。
|
||
|
||
如果你对 **Supervised PCA** 的数学实现或者 **FDR** 的具体算法流程感兴趣,我们可以针对性地展开推导。你的 RTX 5070 在处理这类涉及大规模矩阵运算的任务时会非常高效。 |