朴素贝叶斯

朴素贝叶斯算法是以后验概率最大为理论基础而得出的分类模型。要了解朴素贝叶斯,就需要先了解贝叶斯公式。

贝叶斯公式

首先,先看下面这个例子:

假设一所学校里面有40%的男生,60%的女生。
你在这所学校的大道上走,迎面走来一个人,由于比较远,看不清楚特征。现在需要你判断Ta的性别,请问你的答案是什么?
根据学校人数的分布情况,你知道这个学校女生多,因此,回答女生没一点毛病。
好了,现在Ta走近了一点,可以看到这个人穿着长裤。已知,男生总是穿着长裤,女生有一般穿着长裤,一半穿着裙子(短裤什么的在这个学校不流行,所以没人穿)。那么,现在你的回答是什么?
这个虽然麻烦一点,但是,简单的算一算还是能够得到答案的:男生全部穿长裤,所以所有男生都有可能是Ta,但女生有一般是穿的长裙,因此只有一半的女生有可能Ta。假设学校总共有100人(虽然有点小,但毕竟有人),那么候选人中有40个男生,30个女生。因此,是男生的概率大一些。
OK,你们又近了一些,你发现Ta留着长发!!!仔细想想,女生中有2/3的是留着长发的,而男生,嘻嘻,就只有一个(比较非主流撒)。那个留着长发的男生你正好认识,好像他是戴眼镜的,而Ta,并没有戴眼镜!!!没错,真相只有一个,Ta是一个女生,哇咔咔,真佩服自己,推理小王子有没有。

这个例子中,根据一个又一个特征的出现,我们得到了最后的结果,而从Bayes的角度,则可以这样理解:

在刚开始,我们仅仅知道先验概率,即学校的男女比例P(男生)和P(女生)。

之后,我们又得到了Ta的一个特征——穿长裤。那么,我们就需要来修正之前得到的先验概率了,因为有一半的女生已经被排除了。

\[P(Ta = 男生) = P(男生) * P(长裤|男生) / P(长裤) \]

\[P(Ta = 女生) = P(女生) * P(长裤|女生) / P(长裤) \]

这个就是Bayes公式,其一半形式如下:

\[posterior = \frac{likehood \times prior}{evidence} \]

或者是:

\[P(\omega_i | x) = \frac{p(x|\omega_i) \times P(\omega_i)}{p(x)} \]

高大上的Bayes公式就这么出来了。

朴素贝叶斯

朴素贝叶斯的思想基础可以概括如下:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就分到哪一类中。仅仅如此,还不能称之为朴素。其之所以朴素,是因为它假定了变量之间相互独立。这个假设很强,强到是个人都觉得有问题。简单想想,如果有两个特征:穿裙子和性别,那么,很容易想到,穿裙子的基本都是女生(男生穿个裙子,确定不是在演小品?),所以,这两个特征之间相互不独立。在现实中,像这种例子还有很多,但是,朴素贝叶斯作为大杀器,在这种强假设的情况下,仍有优异的表现,不得不说,贝叶斯的强大啊。

朴素贝叶斯的正式定义如下:

\[x=\{a_1,a_2,...,a_m\} \]

为一个待分类项,而每个\(a\)\(x\)的一个特征属性。

有类别集合

\[C=\{y_1,y_2,...,y_n\} \]

计算

\[P(y_1|x),P(y_2|x),...,P(y_n|x) \]

\[\mathop{\arg\max}_{y_k} P(y_k|x) \]

所以,问题的关键就在于求解\(P(y_k|x)\)

计算\(P(y_k|x)\)

假设我们已经有一个训练样本集\(X\)。那么,就可以统计各个特征在各个类别下的条件概率估计,即

\[P(a_1|y_1),P(a_2|y_1),...,P(a_m|y_1);\\ P(a_1|y_2),P(a_2|y_2),...,P(a_m|y_2);\\ ...\\ P(a_1|y_n),P(a_2|y_n),...,P(a_m|y_m) \]

如果各个属性见条件独立,则根据贝叶斯定理可得

\[P(y_y|x)=\frac{P(x|y_i)P(y_i)}{P(x)} \]

由于分母是个常数,因此只需要将分子最大化即可,又因为各特征属性是条件独立的,所以有

\[P(x|y_i)P(y_i)=P(y_i)\Pi_{j=1}^mP(a_j|y_i) \]

拉普拉斯修正

计算\(P(y_k|x)\)时,由于特征空间较为稀疏,因此,常常会出现概率为0的情况,这是我们不愿意看到了。

比如:

\[P(a_1|y) = 0, P(a_k|y)=1,k\in[2,3,...m] \]

在这种情况下,认为其概率为0显然是不合适的,因此,需要对其进行一些修正。常用的修正方法是拉普拉斯修正法。

原有的\(P(a_j|y_i)\)的计算方式为

\[P(a_j=a_{jk}|y_i) = \frac{Count(y=y_i, a_j=a_{jk})}{Count(y=y_i)} \]

引入拉普拉斯修正以后,计算公式变为

\[P(a_j=a{jk}|y_i) = \frac{Count(y=y_i, a_j=a{jk}) + 1}{Count(y=y_i) + n} \]

由于分子中含有常数1,因此分子必定非0,也就消除了上述的风险。

优缺点

优点

  • 易执行
  • 特征空间大
  • 有效

缺点

  • 无语义分析
posted @ 2017-10-15 12:12  Magle  阅读(857)  评论(0编辑  收藏  举报