半朴素贝叶斯

0、概述

  首先引入两个事件的全概率公式。接下来假设属性之间是相互对的,引出了朴素贝叶斯公式。由于实际问题中,属性之间完全独立这个假设几乎是不可能的,属性除了与类别相关外,还会与除本身外的其他属性相关,为了有效利用属性之间的相关信息,引入了半朴素贝叶斯方法。

1、全概率公式(贝叶斯公式)

  设A和B为两个事件,可以将A表示为

\[A=AB\cup AB^c \tag{1} \]

\(A\)中的结果要么同时属于\(AB\),要么只属于\(A\)但不属于\(B\),显然\(AB\)\(AB^c\)是互不相容的,因此由概率第三公理可得:
\(P(A)=P(AB)+P(AB^c)=P(A|B)P(B)+P(A|B^c)P(B^c) \tag{2}\)

  将公式(1)进行推广:假定\(B_1, B_2,...,B_n\)是互不相容事件,且

\[\bigcup^n_{i=1} B_i = S \tag{3} \]

其中\(S\)表示全集,即这些事件中至少有一件发生,因此公式(1)的推广可表示为

\[A = \bigcup^n_{i=1} AB_i \tag{4} \]

从而可以得到公式(2)的推广为

\[P(B_j|A) = \frac{P(AB_j)}{P(A)} = \frac{P(A|B_j)P(B_j)}{\sum^n_{i=1} P(A|B_i)P(B_i)} \tag{5} \]

例1:某疾病的患病比例为0.5%,且通过血液化验便可以有95%的把握诊断该疾病;但是血液化验用于健康人也有1%的“伪阳性”结果。若某人血液化验结果为阳性,则此人确实患有该疾病的概率是多少?
解1:令\(D\)表示“接受化验的这个人患有该疾病”这一事件,\(E\)表示“其化验结果为阳性”这一事件,此时所求概率为

\[\begin{align} P(D|E) & =\frac{P(DE)}{P(E)} = \frac{P(E|D)P(D)}{P(E|D)P(D)+P(E|D^c)P(D^c)} \tag{6} \\ & = \frac{0.95*0.005}{0.95*0.005+0.01*0.995} =\frac{95}{294} \tag{7} \end{align} \]

2、朴素贝叶斯

  在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优秀的类别标记。基于朴素贝叶斯分类的原理如下:

\[\begin{align} P(c|x)=\frac{P(c)P(x|c)}{P(x)} = \frac{P(c)}{P(x)}\prod_{i=1}^dP(x_i|c) \tag{8} \end{align} \]

其中\(c\)是label中的分类,\(x\)是样本,\(P(c|x)\)是预测的后验概率。其中\(P(c), P(x)和P(x|c)\)均可以认为是先验概率,分别对应类别的分布、样本的分布和在不同类中样本的分布。通常可以基于大量样本,使用极大似然估计获得。
  由于在计算后验概率的时候,样本分布是固定不变的,因此公式(9)可以忽略分母\(P(x)\),简化为

\[P(c|x) =\frac{P(c)}{P(x)}\prod_{i=1}^dP(x_i|c) \varpropto P(c)\prod_{i=1}^dP(x_i|c) \tag{9} \]

得到贝叶斯公式后,便可以基于最大似然概率得到

\[h_*(x) =\mathop {argmin}_{c \in {\cal y}} P(c|x) \varpropto \mathop {argmin}_{c \in {\cal y}} P(c)\prod_{i=1}^dP(x_i|c) \tag{10} \]

其中\(d\)为特征的数量

贝叶斯估计中涉及:

1) 如何计算先验概率
   1.1) 频率注意学派,主张利用样本分布的参数,使用极大似然估计得到样本分布参数
   1.2) 贝叶斯学派,认为参数是未观察到的随机变量,其本身也可有分布,假定参数服从一个先验分布,基于观测到的数据计算`参数的后验分布`。
2) 如何处理某一维度对应先验概率为0的情况

若某一维度对应的先验概率为0,直接根据样本出现的频率来估计此时得到的\(P(c|x)\)会始终为0,此时可以做拉普拉斯修正,修正公式如下:

\(\hat{P}(c)=\frac{|D_c|+1}{|D|+N} \tag{11}\)\(\hat{P}(x_i|c) = \frac{|D_{c,i}|+1}{|D_c|+N_i} \tag{12}\)
其中,\(|D|\)为样本总量,\(|D_c|\)\(label=c\)的样本总量,\(N\)为类别数,\(|D_{c,i}|\)\(label=c, x=x_i\)的样本数,\(N_i\)\(x=x_i\)的类别数量

例2:参考自西瓜书,已知数据为:

利用上述数据训练一个贝叶斯分类起,对有下列属性的瓜进行判断,该瓜是好瓜还是坏瓜

解2:首先估计类先验概率P(c),有
\(P(c=好瓜)=\frac{8}{17} \space , \space P(c=坏瓜)=\frac{9}{17} \tag{13}\)
接下来为每个属性估计先验条件概率\(P(x_i|c)\)
\(P(x_{色泽}=青绿|c=好瓜)=\frac{3}{8} \space , \space P(x_{色泽}=青绿|c=坏瓜)=\frac{3}{9} \tag{14}\)
\(\vdots \tag{15}\)
\(P(x_{含糖}=0.460|c=好瓜)=\frac{1}{\sqrt{2\pi}}exp\big( -\frac{{(0.460-0.279)}^2}{2*0.101^2}\big) \approx 0.788 \\ P(x_{含糖}=0.460|c=坏瓜)=\frac{1}{\sqrt{2\pi}}exp\big( -\frac{{(0.460-0.154)}^2}{2*0.108^2}\big) \approx 0.066 \tag{16}\)
从而可得:

\[P(c|x)\varpropto P(c)\prod_{i=1}^dP(x_i|c) =P(c)P(x_{色泽}|c)*...*P(x_{含糖}|c) \tag{17} \]

从而可得

\[P(c=好瓜|x)=P(c=好瓜)*P(x_{色泽}=青绿|c=好瓜)*...*P(x_{含糖}=0.460|c=好瓜) \approx 0.038 \tag{18} \]

同理可得\(P(c=坏瓜|x)=6.80*10^{-5}\)
该瓜是好瓜的概率是最大的。

备注1:全概率公式更多关注分母的展开,是求和的关系,要求条件事件是互斥的;而朴素贝叶斯关注的是分子的展开,是求积的关系,要求事件是相互独立的
备注2:朴素的含义指的是为了便于计算,假定了各个属性之间是相互独立的

3、半朴素贝叶斯

  现实情况所有属性相互独立几乎是不可能的,在不确定相关性的前提下,某一属性\(x_i\)不仅与类别\(c\)相关,还与除\(x_i\)之外的其他属性相关,理论上贝叶斯公式需要表述为:

\[P(c|x) =\frac{P(c)P(x|c)}{P(x)}=\frac{P(c)}{P(x)}\prod_{i=1}^dP(x_i|\{x_j,j=1,2,...,d ; j\ne i\},c)*P(\{x_j,j=1,2,...,d ; j\ne i\}|c) \tag{19} \]

备注:上式由概率论链式法则得到:即

\[P(x_1,x_2|c)=\frac{P(x_1,x_2,c)}{P(c)}=\frac{P(x_1|x_2,c)P(x_2,c)}{P(c)}=\frac{P(x_1|x_2,c)P(x_2|c)P(c)}{P(c)}=P(x_1|x_2,c)P(x_2,c) \tag{20} \]

  如果完全考虑各属性之间的相关性会大大增加计算复杂度,所以仅考虑部分属性之间的依赖关系,这种情况被称为半朴素贝叶斯。其实这里就类似于n-gram语言模型

  为了计算量不至于太大,通常会假定每个属性只依赖另外的一个属性(父属性),这样能够更加准确的描述真实情况,朴素贝叶斯公式更改为:

\[\begin{align} P(c|x) \varpropto P(c)\prod_{i=1}^dP(x_i|c,pa_i) \end{align} \tag{21} \]

例3:根据例2的数据计算\(P(x_{脐部}=凹陷|c=好瓜,x_{声音}=浊响)\)

解3:\(P(x_{脐部}=凹陷|c=好瓜,x_{声音}=浊响)=\frac{P(x_{脐部}=凹陷,c=好瓜,x_{声音}=浊响)}{Pc=好瓜,x_{声音}=浊响)}=\frac{3}{6}\)

考虑到拉普拉斯修正,即:

\[\hat P(c,x_i)=\frac{|D|+N_i}{|D_{c,x_i}|+1}, \space \hat P(x_j|c,x_i)=\frac{|D_{c,x_i,x_j}|+1}{|D_{c,x_i}|+N_j} \tag{22} \]

其中\(N_i, N_j\)分别代表属性\(i,j\)的取值个数

由数据可知,\(N_{脐部}=3, N_{声音}=2\),所以修正后的\(P(x_{脐部}=凹陷|c=好瓜,x_{声音}=浊响)=\frac{3+1}{6+3}\)

  在确定了上述(21)的公式后,问题就转化成如何确定每个属性的父属性\(pa_i\),目前共存在三种方法,即:SPODE (Super-Parent ODE)方法,TAN (Tree Augmented naive Bayes) 方法和AODE (Averaged One-Dependent Estimator) 方法。

备注:类比1-gram模型中,父属性对应的就是当前属性的前一个属性

1)SPODE:

  所有属性都依赖于一个父属性,这个父属性被称为“超父”,可以通过交叉验证的方法获得超父属性。

2)TAN:

  以两两属性之间的条件互信息作为权重构建带权的完全图,接下来将完全图转换为最大带权生成树。TAN保留了强相关属性之间的依赖性.

(1)计算任意两个属性之间的条件互信息

\[I(x_i,x_j|y)=\sum_{x_i,x_j,c\in y}p(x_i,x_j|c) \log {\frac{p(x_i,x_j|c)}{p(x_i|c)p(x_j|c)}} \tag{23} \]

(2)以属性为结点构建完全图,任意两个结点之间的权重为\(I(x_i,x_j|y)\)

(3)构建此完全图的最大带权生成树,挑选根变量,将边设置为有向的

(4)加入类别结点\(y\),增加从\(y\)到每个属性的有向边

3) AODE(Averaged One-Dependent Estimator)

  是一种基于集成学习的独依赖分类器,尝试将每个属性做为超父来构建SPODE,然后将那些足够训练数据支撑(\(|D_{x_i}|\ge m\))的SPODE集成加起来做为最终的结果,即

\[P(c|x) \varpropto \sum_{i=1,|D_{x_i}| \ge m }P(c,x_i)\prod_{i=1}^dP(x_j|c,x_i) \tag{24} \]

posted @ 2019-12-03 17:09  liujy1  阅读(1163)  评论(0编辑  收藏  举报