Naive Bayes Classifier - 朴素贝叶斯分类器
简介
在机器学习中,朴素贝叶斯分类器是一系列基于“贝叶斯原理”和“特征之间独立分布假设”的概率分类器的总称。把它的名称分成两部分来看,一部分是“贝叶斯”对应的是“贝叶斯原理”;另一部分对应的是“朴素 Naive” 对应的是 “特征之间独立分布假设”,因为在现实世界里这明显是一个过于简单的假设。
自20世纪50年代以来, 朴素贝叶斯一直受到广泛的研究。它是在1960s,作为一种流行的文本分类方法进入人们的视野。经过适当的预处理, 它在文本分类领域甚至可以与更高级的算法(比如svm)取得相当的水平; 在自动医疗诊断中也有发现其应用价值。
数学原理
朴素贝叶斯本质上是一个条件概率模型,他首先要解决的问题是求出某个状态X=(x1,…,xn)X=(x_1, \dots, x_n)X=(x1,…,xn)下,发生事件CkC_kCk的概率。数学表达式如下:
p(Ck∣x1,…,xn)p(C_k \mid x_1, \dots, x_n) p(Ck∣x1,…,xn)
根据“贝叶斯原理”,上述表达式可以转化成如下表达式,其中X=(x1,…,xn)X=(x_1, \dots, x_n)X=(x1,…,xn):
对于给定的x来说,p(x)其实是一定的,可以理解为是个常数。那么说明我们要求解的是上述等式的分子,分子可以用如下联合概率(joint probability)表达式表示:
p(Ck,x1,…,xn)p(C_k , x_1, \dots, x_n) p(Ck,x1,…,xn)
根据条件概率定义,可以使用链式法则作如下推导:
到了这个时候,该’Naive Bayes’里的Naive出来表演了,Naive指的是简单,朴素:假设X=(x1,…,xn)X=(x_1, \dots, x_n)X=(x1,…,xn)里的所有xix_ixi相互独立。
根据这个前提假设我们可以知道:
因此,我们要求解的问题可以表达如下,其中∝\propto∝表示成正比:
可以进一步表达如下,其中
:
截止目前以上讨论的都是 Naive Bayes 概率模型的推导问题,离我们要讨论的 Naive Bayes Classifier 还差一步。要形成一个完整的 Naive Bayes Classifier,我们还需要一个判定法则。最通常用的一个法则是最大概率法则(MAP rule);
结合如上法则,我们可以形成一个完整的 Naive Bayes Classifier 了。
不同的 Naive Bayes Classifier 的不同之处主要体现在其对 P(xi∣y)P(x_i \mid y)P(xi∣y) 的假设上,比如说 ‘Gaussian Naive Bayes’ 的假设是,P(xi∣y)P(x_i \mid y)P(xi∣y) 服从高斯分布:
P(xi∣y)=12πσy2exp(−(xi−μy)22σy2)P(x_i \mid y) = \frac{1}{\sqrt{2\pi\sigma^2_y}} \exp\left(-\frac{(x_i - \mu_y)^2}{2\sigma^2_y}\right)P(xi∣y)=2πσy21exp(−2σy2(xi−μy)2)
在训练一个 “Gaussian Naive Bayes Classifier” 的时候,我们的目的是计算出 y 的mean(μy\mu_yμy)和std(σy2\sigma^2_yσy2)。
优劣势讨论
朴素贝叶斯是一种基于概率理论的分类算法,其代码实现和训练都比较简单,需要计算量较少。尽管它对于特征相互独立这一假设不太符合实际,但是却使其在在实际中更加实用。特征间关系的解耦,使得我们可以独立地研究每个特征相对于类别的分布,有效避免了‘维度灾难’(即需要处理的数据量随着特征数量(维度)的增加呈指数级地增长)。
另一方面,尽管朴素贝叶斯在分类领域的效果不错,是处理分类问题的一把好手,但却不能准确预测事务的概率,它的机制设计是通过概率之间的比较输出结果,更关注的是相对的大小。
参考文献
维基百科 - Naive Bayes Classifier
scikit-learn - 1.9. Naive Bayes