贝叶斯分类器

12/21/2017 11:55:07 AM

贝叶斯分类器的出发点是贝叶斯定理

\[P(A|B)=\frac{P(B|A)P(A)}{P(B)}. \]

贝叶斯定理由英国学者托马斯·贝叶斯(1702~1763)提出,于1763年被发表。从发表的时间来看,这个定理的背后肯定故事很多。大家可以去了解一下相关的历史。下面,我们来解释一下贝叶斯分类器的原理。

一、贝叶斯决策

首先我们来描述一下需要解决的问题。假设有\(N\)种可能的类别标记,即\(Y=\{c_1,c_2,\cdots,c_N\}\)。那么对于样本\(\boldsymbol{x}\),它属于哪一类呢?

在这里,我们首先算出样本\(\boldsymbol{x}\)属于第\(i\)个类的概率,即\(P(c_i|\boldsymbol{x})\);然后,通过比较所有的\(P(c_i|\boldsymbol{x})\)得到样本\(\boldsymbol{x}\)所属的最佳类别。于是如何计算\(P(c_i|\boldsymbol{x})\)便称为了问题的关键。

将类别\(c_i\)和样本\(\boldsymbol{x}\)代入到上面的贝叶斯公式中,得到

\[P(c_i|\boldsymbol{x})=\frac{P(\boldsymbol{x}|c_i)P(c_i)}{P(\boldsymbol{x})}. \]

一般来说,我们称\(P(c_i)\)先验概率,称\(P(\boldsymbol{x}|c_i)\)条件概率,而\(P(\boldsymbol{x})\)是用于归一化的证据因子。对于\(P(\boldsymbol{c_i})\),我们可以通过训练样本中类别为\(c_i\)的样本所占的比例进行估计;此外,由于只需要找出最大的\(P(c_i|\boldsymbol{x})\),因此我们并不需要计算\(P(\boldsymbol{x})\)

于是,当求出条件概率\(P(\boldsymbol{x}|c_i)\),问题便完美的解决了。可是问题并不简单。

为了求解条件概率\(P(\boldsymbol{x}|c_i)\),人们基于不同假设提出了许多方法。

二、朴素贝叶斯分类器

假设样本\(\boldsymbol{x}\)包含\(d\)个属性,即\(\boldsymbol{x}=\{x_1,x_2,\cdots,x_d\}\)。于是有

\[P(\boldsymbol{x}|c_i)=P(x_1,x_2,\cdots,x_d|c_i). \]

这个联合概率难以从有限的训练样本中直接估计得到。于是,朴素贝叶斯(Naive Bayesian,简称NB)采用了“属性条件独立性假设”:对已知类别,假设所有属性相互独立。于是有

\[P(x_1,x_2,\cdots,x_d|c_i)=\prod_{j=1}^d P(x_j|c_i). \]

这样的话,我们就可以很容易地推出相应的判定准则了:

\[h_{nb}(\boldsymbol{x})=\mathop{\arg \max}_{c_i\in Y} P(c_i)\prod_{j=1}^dP(x_j|c_i). \]

条件概率\(P(x_j|c_i)\)的求解

如果\(x_j\)是标签属性,那么我们可以通过计数的方法估计\(P(x_j|c_i)\)

\[P(x_j|c_i)=\frac{P(x_j,c_i)}{P(c_i)}\approx\frac{\#(x_j,c_i)}{\#(c_i)}. \]

其中,\(\#(x_j,c_i)\)表示在训练样本中\(x_j\)\(c_i\)共同出现的次数。

如果\(x_j\)是数值属性,通常我们假设类别\(c_i\)中的所有样本第\(j\)个属性的值服从正态分布。我们首先估计这个分布的均值\(\mu\)和方差\(\sigma\),然后计算\(x_j\)在这个分布中的概率密度\(p(x_j|c_i)\)

例子

下面我们通过经典的西瓜问题来举个例子。

训练集如上,我们现在对下面的测试例“测1”进行分类

首先估计类先验概率\(P(c_i)\),有

\begin{align}
&P(好瓜=是)=\frac{8}{17}=0.471 \newline
&P(好瓜=否)=\frac{9}{17}=0.529
\end{align}

然后,为每个属性估计条件概率(这里,对于连续属性,假定它们服从正态分布)

于是,有

\begin{align}
P(&好瓜=是)\times P_{青绿|是} \times P_{蜷缩|是} \times P_{浊响|是} \times P_{清晰|是} \times P_{凹陷|是}\newline
&\times P_{硬滑|是} \times p_{密度:0.697|是} \times p_{含糖:0.460|是} \approx 0.063 \newline\newline
P(&好瓜=否)\times P_{青绿|否} \times P_{蜷缩|否} \times P_{浊响|否} \times P_{清晰|否} \times P_{凹陷|否}\newline
&\times P_{硬滑|否} \times p_{密度:0.697|否} \times p_{含糖:0.460|否} \approx 6.80\times 10^{-5}
\end{align}

由于$0.063>6.80\times 10^{-5} $,因此,朴素贝叶斯分类器将测试样本“测1”判别为“好瓜”。

更多的问题

这里需要注意的问题,还有

  • 数值下溢问题:多个概率值相乘,得到的结果往往非常小;通常采用取对数的方式,将连乘转化为连加,以避免数值下溢。

  • 平滑:某些属性值在训练集中没有与某个类同时未出现,如“敲声=清脆,好瓜=是”,这样将得到\(P_{清脆|是}=0\);为避免这样的情况出现,常使用拉普拉斯修正

三、半朴素贝叶斯分类器

朴素贝叶斯采用了“属性条件独立性假设”,但这个假设的确是有些草率了。因为往往属性之间包含着各种依赖。于是,人们尝试对这个假设进行一定程度的放松,由此产生了“半朴素贝叶斯分类器”(semi-naive Bayes classifiers)的学习方法。

半朴素贝叶斯分类器的基本想法是适当考虑一部分属性间的相互依赖信息。独依赖估计(One-Dependent Estimator,简称ODE)是半朴素贝叶斯分类器最常用的一种策略。顾名思义,独依赖是假设每个属性在类别之外最多依赖一个其他属性,即

\[P(x|c_i)=\prod_{j=1}^d P(x_j|c_i,{\rm pa}_j). \]

其中,\({\rm pa}_j\)为属性\(x_i\)所依赖的属性,称为\(x_i\)的父属性。假设父属性\({\rm pa}_j\)已知,那么可以使用下面的公式估计\(P(x_j|c_i,{\rm pa}_j)\)

\[P(x_j|c_i,{\rm pa}_j)=\frac{P(x_j,c_i,{\rm pa}_j)}{P(c_i,{\rm pa}_j)}. \]

于是,问题的关键变成了如何确定每个属性的父属性。不同的做法产生了不同的独依赖分类器。

  • SPODE(Super-Parent ODE)假设所有的属性都依赖于同一个属性,称为超父。

  • TAN(Tree Augmented naive Bayes)则在最大带权生成树算法的基础上发展的一种方法。

  • AODE(Averaged ODE)是一种集成学习的方法,尝试将每个属性作为超父来构建SPODE,与随机森林的方法有所相似。

下面具体描述一下TAN。

TAN

TAN的实施步骤如下:

  1. 计算任意属性之间的条件互信息$$I(x_i,x_j|y)=\sum_{x_i,x_j;c_k\in Y}P(x_i,x_j|c_k)\log\frac{P(x_i,x_j|c_k)}{P(x_i|c_k)P(x_j|c_k)};$$
  2. 以属性为节点构建完全图,节点间的权重设为相应的互信息;
  3. 构建此完全图的最大带权生成树,挑选根变量,将边置为有向;
  4. 加入类别结点\(y\),增加从\(y\)到每个属性的有向边。

容易看出,条件互信息\(I(x_i,x_j|y)\)刻画了属性\(x_i\)\(x_j\)在已知类别情况下的相关性。因此,通过最大生成树算法,TAN实际上仅保留了强相关属性之间的依赖性。

在这里,我们通过将属性条件独立性假设放松为独立依赖假设,获得了泛化性能的提升。那么如果更进一步,考虑属性间的高阶依赖,能否可以进一步提升泛化性能呢?也就是说,将\(P(x|c_i)=\prod_{j=1}^d P(x_j|c_i,{\rm pa}_j)\)中的\({\rm pa}_j\)扩展为包含\(k\)个属性的集合\({\rm\bf{pa}}_j\),从而将ODE拓展为\(k\)DE。需要注意的是,随着\(k\)的增加,准确地估计概率\(P(x_j|c_i,{\rm\bf{pa}_j})\)所需的训练样本数量将以指数级增加。因此,若训练数据非常充分,泛化性能有可能提升;但在有限样本的条件下,则会陷入估计高阶联合概率的泥沼。

四、贝叶斯网络

贝叶斯网络(Bayesian network)也称信念网(belief network),它借助有向无环图(Directd Acyclic Graph,简称DAG)来刻画属性之间的依赖关系,并使用条件概率表(Conditional Probability Table,简称CPT)来描述属性的联合概率分布。

具体来说,一个贝叶斯网络\(B\)由结构\(G\)和参数\(\Theta\)两部分构成,即\(B=(G,\Theta)\)。网络结构\(G\)是一个有向无环图,其中的每一个结点对应一个属性,若两个属性由直接依赖关系,则它们由一条边连接起来;参数\(\Theta\)则是定量描述这种依赖关系。假设属性\(x_i\)\(G\)中的父节点集为\(\pi_i\),则\(\Theta\)包含了每个属性的条件概率表\(\theta_{x_i|\pi_i}=P_{B}(x_i|\pi_i)\)

下面给出了西瓜问题的一种贝叶斯网结构以及属性“根蒂”的条件概率表。

未完待续...[后面太难,头昏脑涨]

参考

[1] 周志华. 机器学习[M]. 清华大学出版社, 2016.

本文链接:http://www.superzhang.site/blog/classification-based-on-bayesian

posted on 2017-12-21 21:10  SuperZhang828  阅读(4292)  评论(0编辑  收藏  举报

导航