Files
Notes/机器学习/统计学习要素-ESL-v1/4 第四章 分类的线性方法.md
2026-05-16 17:16:51 +08:00

153 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
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.
---
title: 4 第四章 分类的线性方法
draft: false
tags:
- ESL
---
## [逻辑架构图]
分类线性方法的逻辑演进并非随机,而是关于“假设强度”与“参数效率”的权衡:
- **线性回归代理 (The Indicator Matrix Trap)**:最廉价的方案。将离散标签强行投影到连续空间,代价是忽视了概率分布的边界特征,产生“掩盖效应”。
- **生成式建模 (LDA/QDA)****建模的是 $P(X|G)$**。通过描述每一类数据“长什么样”(高斯分布),利用贝叶斯法则反推分类边界。
- **判别式建模 (Logistic Regression)****建模的是 $P(G|X)$**。直接对分类边界Log-odds进行线性建模不关心数据本身的分布只关心“那一刀”怎么切。
- **计算实现层**:从 OLS 的正规方程解,演进到 Logistic 的 IRLS (迭代重加权最小二乘) 优化。
---
## [深度整理正文]
### A. 指示矩阵线性回归:期望投影
- **原本内容**:用 One-Hot 编码拟合条件期望。
- **深度整理**
对 $K$ 个类别建立 $N \times K$ 的指示矩阵 $\mathbf{Y}$。回归模型为 $\hat{\mathbf{Y}} = \mathbf{X}(\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{Y}$。
- **{扩充部分}**
> **期望等价性推导**
>
> 最小二乘法在指示矩阵上的预测值 $\hat{y}_k(x)$ 实际上是对 $E[Y_k | X=x]$ 的估计,而 $E[Y_k | X=x] = P(G=k | X=x)$。
>
> **掩盖效应的底层数学解释**
>
> 当类别 $K \ge 3$ 时,中间类别的回归超平面可能被两侧类别的超平面“夹死”,导致该类别的预测概率在整个特征空间内都无法占优。这是因为线性回归试图在整个实数域上拟合 $0/1$ 响应,这是一种**刚性过强**的投影,不像 Logistic 回归那样有 Sigmoid 函数提供的“容错缓冲”。
### B. LDA建模 $P(X|G)$ 的生成式策略
- **原本内容**:通过建模 $P(X|G)$,间接得到 $P(G|X)$。假设协方差 $\Sigma$ 相同。
- **深度整理**
**LDA 究竟建模了什么?** 它建模的是每一类数据的概率密度函数。
假设第 $k$ 类数据服从多元高斯分布:
$$f_k(x) = \frac{1}{(2\pi)^{p/2}|\Sigma|^{1/2}} e^{-\frac{1}{2}(x-\mu_k)^T\Sigma^{-1}(x-\mu_k)}$$
- **{扩充部分}**
> **判别函数 $\delta_k(x)$ 的推导**
>
> 我们根据贝叶斯后验概率最大化进行分类。比较两类 $k$ 和 $l$ 时,对比的是 $\log \frac{P(G=k|X=x)}{P(G=l|X=x)}$。
>
> 代入高斯分布公式,展开二次项:
>
> $$-\frac{1}{2}(x-\mu_k)^T\Sigma^{-1}(x-\mu_k) = -\frac{1}{2} [x^T\Sigma^{-1}x - 2x^T\Sigma^{-1}\mu_k + \mu_k^T\Sigma^{-1}\mu_k]$$
>
> **核心逻辑**:因为 LDA 强制所有类共享同一个 $\Sigma$**二次项 $x^T\Sigma^{-1}x$ 在做差时会被精准抵消**。
>
> 最终剩下的线性判别函数为:
>
> $$\delta_k(x) = x^T\Sigma^{-1}\mu_k - \frac{1}{2}\mu_k^T\Sigma^{-1}\mu_k + \log\pi_k$$
>
> 这就是为什么边界是平直的超平面。
>
> **系统视角下的计算开销**
>
> 预测时,我们不需要每次都计算复杂的对数概率,只需要保存 $\mathbf{w}_k = \Sigma^{-1}\mu_k$ 这个向量。一次预测仅需一个**向量点积**$x^T\mathbf{w}_k$)加一个常数偏移。这在硬件层面是极易通过 SIMD (单指令多数据) 加速的。
### C. Logistic 回归:建模对数几率 (Log-odds)
- **原本内容**:建模 $P(G|X)$。用 Sigmoid 把线性回归压缩到 $(0, 1)$。
- **深度整理**
Logistic 回归的核心假设是**两个类别的后验概率之比的对数是线性的**
$$\log \frac{P(G=1|X=x)}{P(G=0|X=x)} = \beta_0 + \beta^T x$$
- **{扩充部分}**
> **Logit 函数的本质**
>
> 定义 $p(x) = P(G=1|X=x)$,上述公式即为 $\text{logit}(p(x)) = \beta^T x$。
>
> 反解出 $p(x)$,得到 Sigmoid 形式:
>
> $$p(x) = \frac{e^{\beta^T x}}{1 + e^{\beta^T x}} = \frac{1}{1 + e^{-\beta^T x}}$$
>
> **极大似然估计 (MLE) 与 Hessian 矩阵**
>
> 为了求解 $\beta$,我们要最大化对数似然 $\ell(\beta)$。
>
> 其梯度Score Function$\frac{\partial \ell}{\partial \beta} = \sum_{i=1}^N x_i (y_i - p(x_i))$。
>
> 其二阶导Hessian 矩阵)为:$\frac{\partial^2 \ell}{\partial \beta \partial \beta^T} = -\sum_{i=1}^N x_i x_i^T p(x_i)(1-p(x_i))$。
>
> **底层算法实现IRLS**
>
> 求解 $\beta$ 的 Newton 迭代步可以写成一个加权最小二乘问题:
>
> $$\beta_{new} \leftarrow \arg\min_{\beta} (\mathbf{z} - \mathbf{X}\beta)^T \mathbf{W} (\mathbf{z} - \mathbf{X}\beta)$$
>
> 这里的权重矩阵 $\mathbf{W}$ 是对角阵,元素为 $p_i(1-p_i)$。这意味着**预测概率越接近 0.5 的样本(即位于决策边界附近的样本),对参数更新的权重贡献越大**。这在系统资源分配上体现了“关注困难样本”的策略。
### D. 分离超平面:感知机与距离优化
- **原本内容**:直接分离。
- **{扩充部分}**
> **Rosenblatt 感知机算法**
>
> 它的目标是最小化误分类点到超平面的距离。只要数据线性可分,算法一定收敛。
>
> **随机梯度下降 (SGD) 的原型**
>
> 感知机的更新规则 $\beta \leftarrow \beta + y_i x_i$ 是典型的流式处理Stream Processing。它不需要像 LDA 那样存储全局协方差矩阵,也不需要像 Logistic 那样迭代整个数据集计算 Hessian。这使得它非常适合嵌入式或实时系统。
---
### [边界知识联动]
1. **LDA 与内存布局 (Memory Layout)**
计算 $\Sigma^{-1}\mu_k$ 时,若 $\Sigma$ 是稠密矩阵,计算量大。在实际系统中,如果特征具有强局部相关性(如像素),$\Sigma$ 往往呈现**带状矩阵 (Banded Matrix)** 特性,利用这一特性可以显著减少 Cache Miss。
2. **Logistic 的数值稳定性 (Safe Softmax)**
在计算 $e^{\beta^Tx}$ 时,极大的 $\beta^Tx$ 会导致溢出。工业级实现(如 Rust 的 `ndarray` 或 C++ 的 `Eigen`)会使用 **Log-Sum-Exp Trick**
$\log \sum e^{z_i} = a + \log \sum e^{z_i - a}$,其中 $a = \max(z_i)$。
这保证了在有限位宽的浮点数运算中,概率值永远不会变为 `inf``NaN`
3. **多线程与并行优化**
IRLS 算法中的矩阵乘法 $\mathbf{X}^T \mathbf{W} \mathbf{X}$ 是计算密集型的。通过将数据分块Tiling可以利用多核 CPU 的并行能力。由于 $\mathbf{W}$ 是对角阵,这种并行化在底层可以通过 OpenMP 或类似的线程池模型轻松实现。
4. **信号处理关联**
Logistic 函数在信号处理中常被视为一个**非线性限幅器 (Limiter)**,它将无限范围的输入映射到有限的动态范围。这与你感兴趣的机器人传感器数据融合(如将原始电压映射为逻辑状态)在底层逻辑上是贯通的。