朴素贝叶斯是基于贝叶斯理论的一种监督学习算法,『朴素』意思是假设所有特征两两相互独立,给出类别y和一组依赖特征[x1..xn],根据贝叶斯理论,他们有如下的关系。
$$
P(y|x_1,...x_n) = \frac{P(y)P(x_1,...x_n|y)}{P(x_1,...x_n)}
$$
根据贝叶斯独立性假设
$$
P(xi|y, x1,...,x_{i-1},...,x_n)=P(x_i|y)
$$
对于所有的i,关系可以简化为
$$
P(y|x_1,...x_n) =\frac{P(y)\prod^n_{i=1}P(x_i|y)}{P(x_1,....,x_n)}
$$
因为P(x1,...,xn)}是给出的,所以我们可以做如下的近似
$$
P(y|x_1,...x_n) =\frac{P(y)\prod^n_{i=1}P(x_i|y)}{P(x_1,....,x_n)}
$$
$$
\widehat{y} = arg \max_{y}P(y)\prod^n_{i=1}P(x_i|y)
$$
我们可以用最大后验估计去估计P(Y)和P(xi | y),前者的相对频率可以通过训练数据集计算出来。
不同的朴素贝叶斯分类器的差异主要在于用了不同的关于P(xi|y)分布的假设。
尽管朴素贝叶斯过于简化假设,但在实际文件分类和垃圾邮件过滤中分类效果相当不错。朴素贝叶斯只需要少量的训练数据来估计必要的参数。(朴素贝叶斯效果好以及它适合哪种类型的数据理论解释,可参考下面的文献)
朴素贝叶斯学习器和分类器和一些复杂的方法相比,可以做到非常快。每个特征分布的解耦,意味着每个分布可以独立地当成一维去估计。这反过来又有助于缓解来自维数灾难的问题。
另一方面,虽然朴素贝叶斯以分类器著称,但它是一个坏的估计,所以不必计较从predict_proba得到的概率输出。
References:
H. Zhang (2004). The optimality of Naive Bayes. Proc. FLAIRS.