机器学习_Part2
贝叶斯方法
背景知识
在贝叶斯方法中,核心问题是:已知观测数据后,如何更新我们对某个事件或类别的概率判断。
- 先验概率(Prior Probability):在没有观测到当前样本特征之前,对某个类别的初始概率判断,记为
-
$ P(C_k) $ 其中 $C_k$ 表示第 $k$ 个类别。
- 后验概率(Posterior Probability):在观测到样本 $x$ 之后,样本属于类别 $C_k$ 的概率,记为
-
$ P(C_k\mid x) $
- 类条件概率:在类别 $C_k$ 已知的条件下,样本 $x$ 出现的概率,记为
-
$ P(x\mid C_k) $ 它刻画了“该类生成这个样本的可能性”。
- 证据(Evidence):样本 $x$ 出现的总体概率,记为
-
$ P(x) $
- 贝叶斯公式:
- $ P(C_k\mid x) = \frac{P(x\mid C_k)P(C_k)}{P(x)} $
该公式表明:后验概率 $=$ 类条件概率 $\times$ 先验概率,再除以证据。也就是说,在观察到数据后,可以根据数据对原有认知进行修正。
贝叶斯方法
贝叶斯方法的基本思想是:对每个类别计算后验概率,然后选择后验概率最大的类别作为预测结果。
- 分类准则(Bayes Decision Rule):
- $ \hat{y} = \arg\max_{C_k} P(C_k\mid x) $
将贝叶斯公式代入可得:
- $ \hat{y} = \arg\max_{C_k} \frac{P(x\mid C_k)P(C_k)}{P(x)} $
由于对同一个样本 $x$ 而言,$P(x)$ 对所有类别都相同,因此分类时通常只需比较:
- $ \hat{y} = \arg\max_{C_k} P(x\mid C_k)P(C_k) $
因此,贝叶斯分类器的决策依据可以理解为:综合考虑“该类本身出现的可能性”和“该类生成当前样本的可能性”,选择最有可能的类别。
- 最大后验概率分类准则(二分类):
设类别为 $\omega_1,\omega_2$,则样本 $x$ 的分类结果为
-
$ x \to \omega^* = \arg\max_{\omega_i} P(\omega_i\mid x) $ 对于二分类任务,只需比较
-
$ P(\omega_1\mid x) \quad \text{与} \quad P(\omega_2\mid x) $
根据贝叶斯公式,有
- $ P(\omega_i\mid x) = \frac{p(x\mid \omega_i)P(\omega_i)}{p(x)}, \qquad i=1,2 $
因此只需比较
- $ p(x\mid \omega_1)P(\omega_1) \quad \text{与} \quad p(x\mid \omega_2)P(\omega_2) $
当先验概率相同时,即 $P(\omega_1)=P(\omega_2)$,只需比较类条件概率:
- $ p(x\mid \omega_1) \quad \text{与} \quad p(x\mid \omega_2) $
多分类情形可以完全类似地推广。
- 最小错误概率分类准则:
若将样本 $x$ 判为类别 $\omega_i$,其错误概率定义为
- $ P_e(\omega_i\mid x) = 1 - P(\omega_i\mid x) $
因此,最小化错误概率等价于最大化后验概率,即
- $ \arg\min_{\omega_i} P_e(\omega_i\mid x) = \arg\max_{\omega_i} P(\omega_i\mid x) $
所以,最小错误概率分类准则与最大后验概率分类准则是等价的。
- 最小风险分类准则:
在很多实际问题中,不同类型的分类错误代价并不相同,因此除了考虑错误概率,还需要考虑决策带来的风险。
以二分类问题 $\omega_1,\omega_2$ 为例,定义风险矩阵:
$ \Lambda =
\begin{bmatrix}
\lambda_{11} & \lambda_{12}
\lambda_{21} & \lambda_{22}
\end{bmatrix} $
其中,$\lambda_{ij}$ 表示真实类别为 $\omega_i$ 时,却将其判为 $\omega_j$ 所带来的风险值。
若把样本 $x$ 判为类别 $\omega_j$,则其条件风险为
- $ R(\omega_j\mid x) = \sum_{i} \lambda_{ij} P(\omega_i\mid x) $
最小风险分类准则就是选择条件风险最小的类别:
- $ x \to \omega^* = \arg\min_{\omega_j} R(\omega_j\mid x) $
该准则更加一般:当不同错误代价不同的时候,最小风险分类比单纯最小错误概率分类更符合实际需求。
朴素贝叶斯分类器
朴素贝叶斯分类器(Naive Bayes Classifier)是在贝叶斯分类方法基础上发展起来的一类简单而有效的分类器。它的核心思想是:在给定类别的条件下,(名字中“朴素”的由来)假设各个特征之间相互条件独立,从而将复杂的联合概率计算转化为多个一维概率的乘积。
设样本的特征向量为
- $ x = (x_1,x_2,\dots,x_d) $
类别集合为 $C_1,C_2,\dots,C_K$。根据贝叶斯公式,样本属于类别 $C_k$ 的后验概率为
- $ P(C_k\mid x) = \frac{P(x\mid C_k)P(C_k)}{P(x)} $
其中,直接计算高维特征的类条件概率 $P(x\mid C_k)$ 往往比较困难。朴素贝叶斯作出如下条件独立假设:
- $ P(x\mid C_k) = P(x_1,x_2,\dots,x_d\mid C_k) = \prod_{j=1}^{d} P(x_j\mid C_k) $
于是后验概率可写为
- $ P(C_k\mid x) \propto P(C_k) \prod_{j=1}^{d} P(x_j\mid C_k) $
因此,朴素贝叶斯分类器的分类规则为:
- $ \hat{y} = \arg\max_{C_k} P(C_k) \prod_{j=1}^{d} P(x_j\mid C_k) $
这说明朴素贝叶斯分类器通过“先验概率 $\times$ 各特征条件概率乘积”来决定样本所属类别。
在实际应用中,模型参数通常由训练数据估计:
- 先验概率估计:
-
$ P(C_k) = \frac{N_k}{N} $ 其中,$N_k$ 表示训练集中属于类别 $C_k$ 的样本数,$N$ 表示总样本数。
- 条件概率估计: 对离散特征,可通过频率统计估计 $P(x_j\mid C_k)$; 对连续特征,常假设其服从高斯分布,可通过MLE计算,从而得到高斯朴素贝叶斯模型。
为了避免某个条件概率估计为 $0$ 而导致整个乘积为 $0$,常采用拉普拉斯平滑(Laplace Smoothing):
- $ P(x_j=a\mid C_k) = \frac{N_{kja}+1}{N_k + V_j} $
其中,$N_{kja}$ 表示在类别 $C_k$ 中第 $j$ 个特征取值为 $a$ 的样本数,$V_j$ 表示第 $j$ 个特征可能的取值个数。
朴素贝叶斯分类器的优点是模型简单、训练和预测速度快、对小规模数据也较有效;缺点是条件独立假设通常过强,在特征相关性较强时性能可能受到影响。
集成学习
Bagging方法
Bagging(Bootstrap Aggregating)是一类并行式集成学习方法,其核心思想是:通过对训练集进行有放回抽样,构造多个不同的训练子集,在每个子集上训练一个基学习器,最后再将这些学习器的结果进行综合。
设共有 $T$ 个基学习器,第 $t$ 个基学习器的输出为 $h_t(x)$,则:
- 对于分类问题,常采用多数投票法:
- $ H(x) = \arg\max_{y} \sum_{t=1}^{T} I(h_t(x)=y) $
- 对于回归问题,常采用平均法:
- $ H(x) = \frac{1}{T}\sum_{t=1}^{T} h_t(x) $
其中,$I(\cdot)$ 为示性函数,当条件成立时取 $1$,否则取 $0$。
Bagging 的主要步骤为:
- 从原始训练集有放回地抽样,得到 $T$ 个训练子集;
- 在每个训练子集上分别训练一个基学习器;
- 将所有基学习器的输出进行投票或平均,得到最终结果。
- 留一自举法(Out-of-Bag, OOB):
由于 Bagging 采用的是有放回抽样,所以每次自举采样后,原始训练集中会有一部分样本没有被抽到。这些未被抽中的样本称为袋外样本(out-of-bag samples),可用于对当前基学习器进行验证。
设训练集大小为 $N$,某个样本在一次抽样中未被选中的概率为
- $ 1-\frac{1}{N} $
经过 $N$ 次有放回抽样后,该样本始终未被抽中的概率约为
- $ \left(1-\frac{1}{N}\right)^N \approx e^{-1} \approx 0.368 $
因此,大约有 $36.8\%$ 的样本会成为袋外样本,可以直接用来估计模型的泛化误差,而不必额外划分验证集。
- Bagging 算法为什么有效:
Bagging 的主要作用是降低模型的方差。设多个基学习器的输出分别为 $h_1(x),h_2(x),\dots,h_T(x)$,最终集成输出为它们的平均:
- $ H(x) = \frac{1}{T}\sum_{t=1}^{T} h_t(x) $
若各基学习器相互独立,且方差都为 $\sigma^2$,则集成输出的方差为
- $ \operatorname{Var}(H(x)) = \operatorname{Var}\left(\frac{1}{T}\sum_{t=1}^{T} h_t(x)\right) = \frac{1}{T^2}\sum_{t=1}^{T} \operatorname{Var}(h_t(x)) = \frac{\sigma^2}{T} $
可见,随着基学习器数量 $T$ 增加,集成结果的方差会减小,因此模型预测会更加稳定。实际中各基学习器通常并非完全独立,但只要它们之间不是完全相关,Bagging 依然能够起到明显的方差降低作用,这也是其有效性的主要原因。
随机森林(Random Forest)是 Bagging 的代表算法之一,它以决策树作为基学习器,并在 Bagging 的基础上进一步引入特征随机选择机制。
其基本思想是:
- 通过自举采样生成多个训练子集;
- 在每个子集上训练一棵决策树;
- 在每个节点划分时,不是从全部特征中选择最优划分特征,而是先随机选取一部分特征,再从这部分特征中选择最优划分;
- 最终将多棵决策树的结果进行投票或平均,得到集成结果。
设每次节点划分时随机选取的特征子集大小为 $m$,总特征数为 $d$,则有
- $ m < d $
这种随机选特征的方式能够降低各棵树之间的相关性,从而进一步增强 Bagging 降低方差的效果。
随机森林的优点包括:
- 具有较好的泛化能力;
- 能够处理高维数据;
- 对噪声和异常值不太敏感;
- 可以估计特征的重要性。
因此,随机森林可以看作是“Bagging + 决策树 + 特征随机选择”的组合模型,是集成学习中非常常用的方法。
Boosting方法
Boosting 是一类串行式集成学习方法,其核心思想是:按照顺序训练多个基学习器,后一个学习器重点关注前一个学习器难以正确分类的样本,从而逐步提高整体性能。
与 Bagging 不同,Boosting 更强调“逐步修正前面的错误”。最终模型通常表示为多个弱学习器的加权组合:
- $ H(x) = \sum_{t=1}^{T} \alpha_t h_t(x) $
其中,$h_t(x)$ 表示第 $t$ 个基学习器,$\alpha_t$ 表示该学习器的权重。
Boosting 的基本思想可以概括为:
- 初始时,给每个训练样本分配相同权重;
- 训练第一个基学习器;
- 根据分类结果,提高被错误分类样本的权重,降低被正确分类样本的权重;
- 继续训练下一个基学习器,使其更关注难分样本;
- 将多个基学习器加权组合,形成最终强学习器。
Boosting 的代表算法是 AdaBoost。在二分类情形下,若第 $t$ 个基学习器的错误率为 $\varepsilon_t$,则其权重常写为:
- $ \alpha_t = \frac{1}{2} \ln \frac{1-\varepsilon_t}{\varepsilon_t} $
最终分类器可写为:
- $ H(x) = \operatorname{sign}\left(\sum_{t=1}^{T} \alpha_t h_t(x)\right) $
Boosting 往往能够显著提高分类精度,但对噪声和异常点相对敏感,因为这些样本在迭代过程中可能被不断放大其影响。