Files
Notes/【笔记origin】ESL/18 origin.md
2026-05-16 17:16:51 +08:00

403 lines
18 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
既然你想要更硬核的计算细节我们直接切入核心。协方差矩阵不仅是统计工具它在降维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 在处理这类涉及大规模矩阵运算的任务时会非常高效。