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

13 KiB
Raw Permalink Blame History

第四章

“这个过程的一个很重要的类是 线性判别边界 (decision boundaries);这也是我们说的分类的线性方法” => 寻找界限,把回归看成条件期望的估计 => 分类 = 算概率 + 选最大的

  • 指示矩阵的线性回归 => 回归方法对每个类别建立判别函数 (discriminant functions) ,然后将分到取最大值的判别函数所在类别中. 比如设置One-Hot编码(1,0,0),(0,1,0),(0,0,1)等内容来x则分析后得到如(0.1, 0.7, 0.2)则是第二类 。

直接建模$P(G | X)$:用回归拟合

问题就是,用线性回归的方法约束性太小。但用线性回归去拟合指示变量的条件期望,而这个期望等于类别的后验概率,因此可以用最大值来做分类。

  • 线性判别分析LDA

通过建模$P(X | G)$通过Bayes间接得到$P(G | X)$

P(G | X) = \frac{P(X | G) * P(G)}{P(X)}

P(G=kx)=∑l=1Kfl(x)πlfk(x)πk

f_k(x)=P(X=xG=k) 第 k 类的数据“长什么样”(密度) 𝜋 𝑘

𝑃 ( 𝐺 | 𝑘 ) π k =P(G=k):第 k 类出现的概率(先验)

简单来说,协方差Covariance 是衡量两个变量之间协同变化关系的物理量。

如果说方差Variance是描述一个变量自己“抖动”得有多厉害那么协方差就是描述两个变量 XY 是否“一起抖动”。


1. 直观理解:三种关系

协方差的结果正负号直接反映了两个变量的相关方向:

  • 正协方差 ($Cov(X, Y) > 0$)

    表示两个变量是“同向变化”的。X 变大时,Y 通常也变大(比如:身高和体重)。

  • 负协方差 ($Cov(X, Y) < 0$)

    表示两个变量是“反向变化”的。X 变大时,Y 通常变小(比如:运动量和体脂率)。

  • 零协方差 ($Cov(X, Y) \approx 0$)

    表示两个变量之间没有明显的线性关系,它们的变化是相互独立的(比如:你的饭量和当天的天气)。


2. 数学定义

对于两个随机变量 X 和 $Y$,协方差的定义公式为:

Cov(X, Y) = E[(X - E(X))(Y - E(Y))]

在实际计算中,我们常用这个更简便的展开公式:

Cov(X, Y) = E(XY) - E(X)E(Y)

公式解读:它是 X 与其均值之差,乘以 Y 与其均值之差的期望。如果 X 大于均值时,Y 也经常大于均值,那么乘积就是正的,累加起来协方差就是正的。


3. 协方差 vs 相关系数

协方差有一个致命的缺点:它的数值大小受量纲(单位)影响。

比如你计算身高(米)和体重的协方差,得到的数值可能很小;但如果你把身高换成厘米,协方差会立刻变大 100 倍。这让你很难通过协方差的绝对值来判断相关性有多“强”。

为了解决这个问题,我们将协方差标准化,就得到了相关系数 ($\rho$)

\rho_{XY} = \frac{Cov(X, Y)}{\sigma_X \sigma_Y}

相关系数的范围被锁定在 [-1, 1] 之间,数值越接近 1 或 -1说明线性相关性越强。


4. 为什么你在 CS/AI 领域会经常见到它?

既然你在研究 强化学习机器人控制,协方差对你来说极其重要:

  • 多维正态分布:在描述高维数据分布时,我们需要一个协方差矩阵 (Covariance Matrix)。矩阵里的每一个元素 a_{ij} 都是第 i 个变量和第 j 个变量的协方差。

  • 卡尔曼滤波 (Kalman Filter):这是机器人定位的核心。它通过维护一个协方差矩阵来表示系统对当前位置估计的“不确定度”。

  • PCA主成分分析:通过对协方差矩阵进行特征分解,找到数据方差最大的方向,从而实现降维。


你想看看如何用 Python (NumPy) 快速计算一组实验数据的协方差矩阵吗?或者需要我推导一下 Cov(X, Y) = E(XY) - E(X)E(Y) 这个过程?

协方差矩阵:把“一堆样本数据” → 压缩成“变量之间关系 + 分布形状”的一个矩阵

  • 线性判别分析LDA假设每个类别的协方差一样只根据$\mu, \pi$判断位置****二次项抵消 → 判别函数变线性 => 分类边界 = 直线 / 超平面

  • 其实是用一个统一的 Σ 做“坐标变换”

    x \rightarrow \Sigma^{-1/2} x

    变换之后所有数据变成“球形”然后只比较中心距离。所以你那句话可以升级为LDA = 把所有类变成同样形状 → 再用位置区分

LDA 的目标是找到一个线性判别准则,将数据分配到后验概率 P(G=k|X=x) 最大的那一类。我们按照你的逻辑链条一步步拆解:


1. 建模与高斯假设

首先,我们利用贝叶斯定理来计算样本 x 属于第 k 类的概率:

P(G=k|X=x) = \frac{f_k(x)\pi_k}{\sum_{l=1}^K f_l(x)\pi_l}

其中 \pi_k 是第 k 类的先验概率(通常是该类样本占总样本的比例)。

关键假设

  1. 每类数据服从多元正态分布$X|G=k \sim N(\mu_k, \Sigma)$。

  2. 协方差矩阵相等:所有类别共享同一个协方差矩阵 $\Sigma_k = \Sigma$。


2. 代入贝叶斯分类

我们要比较不同类别的后验概率。由于分母 \sum f_l(x)\pi_l 对所有类别都是一样的,我们只需要最大化分子,或者最大化分子的对数:

\log(f_k(x)\pi_k) = \log f_k(x) + \log \pi_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) = \log \pi_k - \frac{p}{2}\log(2\pi) - \frac{1}{2}\log|\Sigma| - \frac{1}{2}(x-\mu_k)^T\Sigma^{-1}(x-\mu_k)


3. \Sigma 相同 \rightarrow 二次项消失

这一步是 LDA 为何被称为“线性”的关键。展开上面的二次型部分:

(x-\mu_k)^T\Sigma^{-1}(x-\mu_k) = x^T\Sigma^{-1}x - x^T\Sigma^{-1}\mu_k - \mu_k^T\Sigma^{-1}x + \mu_k^T\Sigma^{-1}\mu_k

当你比较两类(比如 k 和 $l$)的判别函数大小时:

  • 常数项 \frac{p}{2}\log(2\pi)\frac{1}{2}\log|\Sigma| 抵消了。

  • 关键点:由于 \Sigma 相同,二次项 x^T\Sigma^{-1}x 在做减法比较时也完全抵消了。


4. 得到线性判别函数 (Linear Discriminant Function)

删掉抵消掉的项,只保留与 k 相关的项,我们得到线性判别函数:

\delta_k(x) = x^T\Sigma^{-1}\mu_k - \frac{1}{2}\mu_k^T\Sigma^{-1}\mu_k + \log \pi_k

可以看到,x 的最高次数是 1。这意味着两个类别之间的决策边界 \delta_k(x) = \delta_l(x) 是一个超平面Hyperplane


5. 总结LDA 的直观理解

虽然上面的推导是从概率视角出发的(生成模型),但 LDA 最终在做的事情可以概括为:

  • 类内方差最小化:让同一类的数据尽量紧凑。

  • 类间均值最大化:让不同类的数据中心尽量远离。

延伸思考:如果 \sigma 不同呢?

如果每一类有自己的 $\Sigma_k$,那么二次项 x^T\Sigma_k^{-1}x 就无法抵消。这会导致决策边界变成二次曲线(抛物线、双曲线等),这就是 QDA二次判别分析

你在做计算机视觉或者机器人传感器融合时如果环境噪声协方差在不同状态下差异很大QDA 可能会比 LDA 更准,但计算开销也更大。

需要我用一段简单的 NumPy 代码演示一下如何从数据中估计 \Sigma \mu_k 吗?

  • 逻辑斯蒂回归:直接假设:

    \log \frac{P(G=1|X)}{P(G=0|X)} = \beta_0 + \beta^T X

  • 它的逻辑是:“我不管你数据怎么来的,我直接学分类边界”

  • 下面的分母可以是一个锚点,比如:

\ln \left( \frac{P(G=1|x)}{P(G=K|x)} \right) = w_1^Tx + b_1

“首先对于凸函数 (convex func on),其局部最优点即为全局最优点,所以总是 (?) 可以收敛到最 优点的,除非数值不稳定,比如矩阵的条件数过大。而凹函数取负号就变成了凸函数。 步长折 半 (step size halving):”

LDA

  • 概率分布出发

  • 有强假设(高斯 + 同协方差)

  • 推出线性边界

Logistic

  • 边界形式出发

  • 不关心分布

  • 直接优化分类概率

第一阶段:概率建模(建立“打分”协议)

我们要解决的问题是:给定输入 $X$,预测它属于哪一类 $G$。

1. 定义输出

对于二分类,我们假设 Y 服从伯努利分布

P(Y=1|X) = p(x), \quad P(Y=0|X) = 1-p(x)

为了用一个统一的连续函数来回归这个 $p(x)$,我们引入 LogisticSigmoid函数

p(x) = \sigma(z) = \frac{1}{1 + e^{-z}}, \quad \text{其中 } z = \beta^T x

逻辑点: 为什么要用 $\sigma(z)$?因为它能把 (-\infty, +\infty) 的线性回归结果,压缩到 (0, 1) 的概率空间。

2. 推广到多分类Softmax

如果我们有 K 个类别,我们给每一类都配一个线性得分 $z_k = \beta_k^T x$。为了让所有类的概率和为 1我们采用 Softmax

p_k(x) = \frac{e^{z_k}}{\sum_{j=1}^K e^{z_j}}

第二阶段:似然估计(寻找最合理的参数)

现在模型有了,我们需要一套标准来衡量什么样的 \beta 是最好的。

1. 构建似然函数

假设我们的样本是独立同分布的。对于单个样本 $(x, y)$,其出现的概率(似然)可以巧妙地写成:

P(y|x) = p(x)^y (1-p(x))^{1-y}

对于整个数据集 $N$,总似然函数就是所有样本概率的累乘:

L(\beta) = \prod_{i=1}^N p(x_i)^{y_i} (1-p(x_i))^{1-y_i}

2. 取对数(降维打击)

乘法太难算,由于 \log 是单调递增的,最大化 L(\beta) 等价于最大化 $\log L(\beta)$

\ell(\beta) = \sum_{i=1}^N [y_i \log p(x_i) + (1-y_i) \log (1-p(x_i))]

这就是 对数似然Log-Likelihood


第三阶段:定义损失函数(从统计转向优化)

在计算机科学和优化领域,我们习惯“最小化”一个成本,而不是“最大化”一个收益。

1. 负对数似然 (NLL)

我们给对数似然加个负号,就得到了损失函数:

Loss = -\ell(\beta) = \sum_{i=1}^N \underbrace{-[y_i \log p(x_i) + (1-y_i) \log (1-p(x_i))]}_{\text{每个样本的交叉熵}}

2. 链接交叉熵 (Cross-Entropy)

回到信息论。如果我们有两个分布 $y$(真实分布)和 $p$(预测分布),它们之间的交叉熵定义为:

H(y, p) = -\sum_k y_k \log p_k
  • 在二分类中,只有两项:$- [y \log p + (1-y) \log (1-p)]$。

  • 在多分类中,它是:$-\sum_{k=1}^K y_k \log p_k$。


总结:逻辑闭环

  1. 物理层 (Data):观测到 X 和标签 $Y$。

  2. 协议层 (Model):用线性回归算出得分 $z$,通过 Sigmoid/Softmax 映射成概率 $p$。

  3. 度量层 (Strategy):基于极大似然估计,推导出我们希望预测概率 p 在真实标签 y 上的分布越集中越好。

  4. 实现层 (Loss):最终落脚到最小化交叉熵

你会发现:

这套推导完全避开了“分类”这个动作,它全程都在做概率密度的回归。所谓的分类,只是在最后选一个 p 最大的索引罢了。

这套逻辑在你写 AI 相关的 Rust 代码时,对应的就是从 Linear Layer 输出 Logits (z),经过 Softmax 变成 Probs (p),最后塞进 CrossEntropyLoss 计算梯度。

这遍梳理下来AIC/BIC 和这个 Loss 之间的联系是不是更清晰了提示AIC 里的 -2 \log L 里的 L 就是我们刚才算的这个似然函数)。

我们假设:

Y \sim \text{Bernoulli}(p(x))

P(Y=1|X)=p(x), \quad P(Y=0|X)=1-p(x)

P(y|x) = p(x)^y (1-p(x))^{1-y}

L(\beta) = \prod_i p(x_i)^{y_i} (1-p(x_i))^{1-y_i}

\ell(\beta) = \sum_i \left[ y_i \log p(x_i) + (1-y_i)\log(1-p(x_i)) \right]

\min_\beta -\ell(\beta)

\sum_i \left[ -y_i \log p(x_i) - (1-y_i)\log(1-p(x_i)) \right]

二分类你用的是:

p(x)=\frac{1}{1+e^{-z}}

多分类换成:

p_k(x)=\frac{e^{z_k}}{\sum_{j=1}^K e^{z_j}}

其中:z_k = \beta_k^T x

对数似然:\log P = \sum_{k=1}^K y_k \log p_k(x)

最终 loss交叉熵-\sum_{k=1}^K y_k \log p_k(x)

Logistic二分类

建模:P(G|X)

Softmax Regression多分类 Logistic

建模:P(G=k|X)

LDA多分类

推导:

f_k(x)

P(G=k|X) \propto e^{f_k(x)}

  • 分离超平面:直接分离 或者 根据距离平均分离