其实我第一次听到朴素贝叶斯分类器时,又看到一大堆的公式,下意识地以为很难。随着后来阅读了一些文献,便觉得不那么难了。可是随着了解的深入,又发现我以为的并不总是我以为的,一些细节处还是没想明白。在这里对朴素贝叶斯作一个总结。
首先,亮一下贝叶斯定理:
P(c|x) = P(x|c)P(c)/P(x)
代入一个具体的分类问题中,c代表类别,x代表特征。那么现在的情况是,给你一堆训练数据,训练一个朴素贝叶斯分类器,之后给你一个新的无标记数据,推测一下该划分到哪个类别。
其实这个问题想想很简单,我们鞍部就班地解出在不同的类别下P(x|c),P(c),P(x)就好啦。
首先P(x)对于每个类别来说都一样,所以不用考虑。
P(c)是先验概率,我们在训练数据中看看每个类占的比例有多少,很容易得出来。
关键是怎么才能求P(x|c)即类条件概率呢?
如果我们现在有N个二值特征,那么x便存在N^2种组合情况,如果我们的样本数据比较小,很可能没有覆盖到某些情况,这就出现了两个问题:维数灾难和数据稀疏。那应该咋办喵?
注意我们的分类器名字中有朴素二字,其中的涵义就是假设特征之间是相互独立的。比如我们有ABC三个特征,那么就有P(ABC|c) = P(A|c)P(B|c)P(C|c), 如此一来,我们可以根据训练集求单个特征的类条件概率就可以啦。
在这里我们顺便提一提极大似然估计。以上的类条件概率估计就用到了这个思想。这种策略是先假定某种确定的概率分布形式,再基于训练样本对概率分布的参数进行估计。例如,在连续属性的情形下,假设此属性服从一个高斯分布,那我们就可以根据训练样本求得均值和方差的极大似然估计。这样我们便可以估计某个新的属性值的类条件概率。
最后,为了避免某个乘子为零而抹去其它乘子的贡献值,可以使用拉普拉斯平滑法避免分子为零。