朴素贝叶斯算法(Naive Bayes)
1. 前言
说到朴素贝叶斯算法,首先牵扯到的一个概念是判别式和生成式。
- 判别式:就是直接学习出特征输出\(Y\)和特征\(X\)之间的关系,如决策函数\(Y=f(X)\),或者从概率论的角度,求出条件分布\(P(Y|X)\)。代表算法有决策树、KNN、逻辑回归、支持向量机、随机条件场CRF等
- 生成式:就是直接找出特征输出Y和特征X的联合分布\(P(X,Y)\),然后用\(P(Y|X)=\frac{P(X,Y)}{P(X)}\)得出。代表算法有朴素贝叶斯、隐式马尔可夫链等。
2. 朴素贝叶斯原理
朴素贝叶斯算法基于贝叶斯定理和特征条件独立假设。
- 贝叶斯定理
- 特征条件独立:特征条件独立假设\(X\)的\(n\)个特征在类确定的条件下都是条件独立的。大大简化了计算过程,但是因为这个假设太过严格,所以会相应牺牲一定的准确率。这也是为什么称呼为朴素的原因。
3. 朴素贝叶斯算法
输入:训练集为\(m\)个样本\(n\)个维度\(T={(x_1,y_1),(x_2,y_2),...,(x_m,y_m)}\),共有K个特征输出类别,分别为\(y\in{\{c_1,c_2,...,c_K}\}\).
输出:为实例\(x_{(test)}\)的分类。
算法流程如下:
- 首先计算计算\(Y\)的\(K\)个先验概率
\[P(Y=c_k)
\]
- 然后计算条件概率分布:
\[P(X=x|Y=c_k)=P(X^{(1)}=x^{(1)},...,X^{(n)}=x^{(n)}|Y=c_k)
\]
由于上式的参数是指数级别,无法计算。所以根据特征条件独立假设,可以化简为下式。
\[P(X=x|Y=c_k)=\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)
\]
- 根据贝叶斯原理,计算后验概率:
\[P(Y=c_k|X=x)=\frac{P(X=x|Y=c_k)P(Y=c_k)}{\sum_kP(X=x|Y=c_k)P(Y=c_k)}
\]
带入\(P(X=x|Y=c_k)=\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)\)
得到
\[P(Y=c_k|X=x)=\frac{\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)P(Y=c_k)}{\sum_k\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)P(Y=c_k)}
\]
由于分母相同,上式再变为如下:
\[P(Y=c_k|X=x)=\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)P(Y=c_k)
\]
- 计算\(X_{(test)}\)的类别
\[y_{(test)}=arg\ max_{c_k}\prod_{j=1}^nP(X^{(j)}=x_{(test)}^{(j)}|Y=c_k)P(Y=c_k)
\]
从上面的计算可以看出,没有复杂的求导和矩阵运算,因此效率很高。
4. 朴素贝叶斯算法小结
朴素贝叶斯算法的主要原理基本已经做了总结,这里对朴素贝叶斯的优缺点做一个总结。
4.1 朴素贝叶斯的主要优点
- 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
- 对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。
- 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
4.2 朴素贝叶斯的主要缺点
- 朴素贝叶斯模型的特征条件独立假设在实际应用中往往是不成立的。
- 如果样本数据分布不能很好的代表样本空间分布,那先验概率容易测不准。
- 对输入数据的表达形式很敏感。