[读书笔记-西瓜书] Bayes分类器

这是阅读周志华教授《机器学习》中第七章(贝叶斯分类器)的笔记。


贝叶斯决策论

使用贝叶斯决策论解决问题时的目标实际上是“最小化总体风险”,可以形式化表示成下式:
$$
R(c_i|x)=\sum_{j=1}^{n}\lambda_{ij}P(c_j|x)
$$
$\lambda_{ij}$:$i$类误分类成$j$类的代价。

$P(c_i|x)$:样本$x$分类成$c_i$的概率。

贝叶斯决策论希望找到一个最小化总体风险的判别准则$h(x)$,对于分类任务则是一个分类准则($h(x)$表示将$x$归类为$h(x)$类),使得上述总体风险最小:
$$
h(x)=\mbox{argmin}\ R(c|x)
$$


贝叶斯准则

贝叶斯准则可以简单理解为“整体风险最小化=每个样本的风险最小化”,风险指的是(比如在分类问题中)被分成错误类的期望。

能够使用贝叶斯准则的前提是获得后验概率$P(c|x)$,贝叶斯分类器此类生成模型则会考虑使用贝叶斯定理来求解这个后验概率:
$$
P(c|x)=\dfrac{P(c)P(x|c)}{P(x)}
$$
解释一下公式中的每一个量的意义:

$P(c|x)$:后验概率,认为$x$分类成$c$的概率。

$P(c)$:先验概率,从公式上直观上看就是“偏见”、“第一眼看到这个人就觉得他是坏人”这样的概率。

$P(x|c)$:$x$相对于$c$的类条件概率,也称似然。指的是已知某些观测所得到结果(类别是$c$)时,对有关事物的性质(恰好是样本$x$)的参数进行估计[1]。

$P(x)$:用于归一化的因子,$P(x)=\sum_{i=1}^{n}P(x|c=i)P(c=i)$.

贝叶斯定理实际上就是希望通过已知相当数量的训练数据集合$D$,我们希望找到一个合理的方法来估计$D$中的$P(c)$和$P(x|c)$:

我们假设训练集中的训练数据独立同分布,那么根据大数定律,$P(c)$可以用每一类样本的频率来估计。

$P(x|c)$很难使用频率估计,因为$D$中的样本$x$通常无法完全覆盖所有情况:未被数据集覆盖$\not=$出现概率为0。于是需要使用极大似然估计.


极大似然估计(MLE)

书中首先在介绍Logistic回归的时候使用了MLE(对数似然),但是没有仔细介绍。

首先假设数据集符合某种概率分布$D(\theta_c)$,被分成不同类完全取决于参数向量$\theta_c$.训练模型的过程就是参数估计的过程。

极大似然估计(MLE)就是一种参数估计方法,估计方法完全写在名字里了:似然($P(x|c)$)极大化。由于分类结果完全取决于$\theta_c$,因此这个似然可以表示成$P(x|\theta_c)$.介绍贝叶斯准则的时候也讲了,“整体风险最小化=每个样本的风险最小化”。因此$\theta_c$对于整个数据集$D​$的似然就是:
$$
P(D|\theta_c)=\prod_{x\in D}P(x|\theta_c)
$$
我们给它取对数(因为小数连乘会导致精度损失):
$$
L(\theta_c)=logP(D|\theta_c)=\sum_{x\in D}\mbox{log}P(x|\theta_c)
$$
我们对$\theta_c$的估计为:
$$
\hat{\theta_c}=\mbox{argmax}_{\theta_c}L(\theta_c)
$$
分析到这里这个式子已经展不开了,因为每个样本具体的似然取决于我们假设的是哪个分布,比如概率密度函数服从正态分布$\N(\mu_c,\sigma^2_c)$,那么对于它的参数$\mu_c$和$\sigma_c^2$的极大似然估计分别为数据集的均值$\dfrac{\sum_{x\in D}x}{|D|}$和方差$\dfrac{\sum_{x\in D}(x-\hat{\mu_c})^2}{|D|}$。

(然而我认为通常这么随意假设数据分布是不科学的= =)


朴素贝叶斯分类器

由于$P(x|c)$是所有属性的联合概率,难以估计属性之间的关系,为了避免计算上的问题,引入属性条件独立性假设。

属性条件独立性假设:假设所有属性(理解:样本$x$中的每一维)相互独立。

于是$P(c|x)$重写为:
$$
P(c|x)=\dfrac{P(c)P(x|c)}{P(x)}=\dfrac{P(c)}{P(x)}\sum_{i=1}^dP(x_i|c)
$$
$d$为属性数,$x_i$为样本$x$在第$i$个属性的取值。对于每个类$c$,$P(x)$都一样。在计算过程中可以忽略,于是:
$$
h(x)=\mbox{argmin}\ R(c|x)
$$

$$
=\mbox{argmax}\ P(c|x)
$$

$$
=\mbox{argmax}\ P(c)\prod_{i=1}^dP(x_i|c)
$$

$P(c)$:可以由每类的样本出现频率获得。

$P(x_i|c)$:针对离散的情况,可以根据类别是$c$并且含有属性$x_i$的出现频率获得;针对连续的情况,用密度函数。

一句话:于是计算贝叶斯实际上就是算两个量:$P(c)$和$P(x_i|c)$,按照两个量对应样本的频率获得一个概率,然后再用$h(x)$的计算方法乘出不同属性对应不同分类的极大似然估计即可。


缺省值处理

有时会遇到某个样本某个属性缺失的情况,但是又不至于将该样本删除,于是需要进行平滑处理。拉普拉斯修正。


半朴素贝叶斯

适当考虑部分属性的相互依赖信息,半朴素贝叶斯使用“独依赖估计”,即每个属性至多依赖于一个其他属性。
$$
P(c|x) \propto P(c)\prod_{i=1}^dP(x_i|c_,pa_i)
$$
$pa_i$:$x_i$所依赖的属性($x_i$的父属性),计算过程就是将任意两个属性之间的依赖信息$I(x_i,x_j)$为边权建图,跑最大生成树。


贝叶斯网

贝叶斯网是个有向无环图,用点表示属性,权值为属性发生的概率,边表示依赖关系,边权为条件概率。例如$A$有一条指向$B$的边,点权描述的是$P(A)$、$P(B)$,这条边的权描述的就是$P(B|A)$. 没有边相连的两个点之间是相互独立的。

有一个笔记[2]中的例子非常形象地描述了相互独立的性质:

一个聪明人,在一场很难的考试里拿了高分,却得到了一封很烂的推荐信,同时他SAT考试却是高分的概率是多少?

我们再隐藏一些细节,一个人推荐信很烂,他SAT高分的概率是多少?或者,一个人SAT低分,却手握牛推的概率是多少?

如果不考虑随机变量之间的依赖关系,上述内容是很难计算的。但是如果有一个构建好的概率图,上面的问题则可以转化为条件概率问题。

学习

已知网络结构的话,那么贝叶斯网上的各种信息是很容易统计的,按照网络要求和训练数据统计不同频率即可。

若网络结构未知,将贝叶斯网的学习看作是一个数据压缩任务,目标是学习到一个能以最短编码长度描述训练数据的模型。定义评分函数:
$$
s(B|D)=f(\theta)|B|-L(B|D)
$$
s(B|D):在数据集$D$条件下的贝叶斯网$B$的评分函数。

$|B|$:贝叶斯网的参数个数。

$f(\theta)$:描述每个参数$\theta$所需字节数

$L(B|D)$:贝叶斯网的对数似然。

我们最终的目的是寻找一个$B$使$s$(B|D)最小,$f(\theta)$可以取1或者$\dfrac{1}{2}\mbox{log}\ m$,分别称为AIC和BIC。

推理

不能直接根据贝叶斯网定义的联合概率分布来计算后验概率,因为网络节点多的稠密图推理是NP-hard的。于是可以借助近似推断,常用Gibbs采样完成,先跳过了= =、


Reference:

[1]. https://blog.csdn.net/lwq1026/article/details/70161857

[2]. https://www.cnblogs.com/ironstark/p/5087081.html