贝叶斯分类器

12/21/2017 11:55:07 AM算法

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

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

贝叶斯定理由英国学者托马斯·贝叶斯(1702~1763)提出,于1763年被发表。从发表的时间来看,这个定理的背后确定故事不少。你们能够去了解一下相关的历史。下面,咱们来解释一下贝叶斯分类器的原理。机器学习

1、贝叶斯决策

首先咱们来描述一下须要解决的问题。假设有\(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})}.\]spa

通常来讲,咱们称\(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})\)blog

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

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

2、朴素贝叶斯分类器

假设样本\(\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\);为避免这样的状况出现,常使用拉普拉斯修正

3、半朴素贝叶斯分类器

朴素贝叶斯采用了“属性条件独立性假设”,但这个假设的确是有些草率了。由于每每属性之间包含着各类依赖。因而,人们尝试对这个假设进行必定程度的放松,由此产生了“半朴素贝叶斯分类器”(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})\)所需的训练样本数量将以指数级增长。所以,若训练数据很是充分,泛化性能有可能提高;但在有限样本的条件下,则会陷入估计高阶联合几率的泥沼。

4、贝叶斯网络

贝叶斯网络(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

相关文章
相关标签/搜索