# 第四章 “这个过程的一个很重要的类是 线性判别边界 (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=k∣x)=∑l=1K​fl​(x)πl​fk​(x)πk​​** **f_k​(x)=P(X=x∣G=k): 第 k 类的数据“长什么样”(密度) 𝜋 𝑘** **𝑃 ( 𝐺 | 𝑘 ) π k ​=P(G=k):第 k 类出现的概率(先验)** > 简单来说,**协方差(Covariance)** 是衡量两个变量之间**协同变化关系**的物理量。 > > 如果说方差(Variance)是描述一个变量自己“抖动”得有多厉害,那么协方差就是描述两个变量 $X$ 和 $Y$ 是否“一起抖动”。 > > --- > > ### 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)$,我们引入 **Logistic(Sigmoid)函数**: $$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)}$ - **分离超平面:直接分离** 或者 **根据距离平均分离**