153 lines
7.1 KiB
Markdown
153 lines
7.1 KiB
Markdown
---
|
||
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)**,它将无限范围的输入映射到有限的动态范围。这与你感兴趣的机器人传感器数据融合(如将原始电压映射为逻辑状态)在底层逻辑上是贯通的。 |