朴素贝叶斯NB Naive Bayes
朴素贝叶斯有一个非常Naive的假设: 所有特征都是相互独立的, 因此所有特征总的条件概率总是每个特征条件概率的乘积. 这个算法的核心就在于贝叶斯公式.
条件概率
条件概率是贝叶斯定理的铺垫. 指的是事件A在另外一个事件B已经发生条件下的发生概率, 记为$P(A|B)$.
比方说有某个布袋, 其中的有2个蓝球3个红球. 问每次不放回的随机从布袋中取出一个球, 连续两次拿到蓝球概率是多少? 第一次拿到蓝球记为$P(A)$, 概率是$\frac{2}{5}$, 假设第一次拿到了蓝球, 那么第二次布袋里一定只有1个蓝球和3个红球. 第二次拿到蓝球记为$P(B|A)$, 概率为$\frac{1}{4}$, 记为, 所以连续两次拿到蓝球的概率为$\frac{2}{5}*\frac{1}{4}=\frac{1}{10}$. 如果把连续两次拿到蓝球记为$P(A, B)$, 那么就得到了条件概率公式:
$$
P(A, B) = P(B|A)\cdot P(A)
$$
反推一下B在A的条件下的概率$P(B|A)$:
$$
P(B|A) = \frac{P(A, B)}{P(A)}
$$
贝叶斯定理
根据条件概率, 可以类似的推出A在B的条件下的概率$P(A|B)$:
$$
P(A|B) = \frac{P(A, B)}{P(B)}
$$
将两侧相同的$P(A,B)$联立消去, 就得到了贝叶斯定理:
$$
P(B|A) = \frac{P(A|B)P(B)}{P(A)}
$$
在这个式子中, 称$P(B)$为先验概率, 即在不知道A事件条件下, 对B事件发生做出的判断. $P(B|A)$称为后验概率, 即在A事件发生后对B事件的重新评估. $\frac{P(A|B)}{P(A)}$称为调整因子或者似然概率, 它对先验概率进行调整, 使其变为后验概率.
朴素贝叶斯
朴素贝叶斯正是建立在贝叶斯定理的基础上, 对条件概率分布做条件独立性假设, 即特征之间相互独立, 并且他们同等重要. 虽然影响精度, 但仍然在某些问题上取得良好的效果.
在贝叶斯定理中, 对于多特征的情况, 将特征写成一个向量$\textbf x$, 对于该样本属于第$k$的个类别的事件记为$C_k$, 将其转化为向量形式有:
$$
P(C_k|\textbf x) = \frac{P(\textbf x|C_k)P(C_k)}{P(\textbf x)}
$$
写成文字也就是:
$$
P(类别|特征) = \frac{P(特征|类别)P(类别)}{P(特征)}
$$
基于各个假设独立的特征, 分母$P(\textbf x)$是一个常数, 将分子$P(\textbf x|C_k)P(C_k)$基于链式法则, 在特征独立的情况下, 将分子重新写为:
$$
P(C_k| x_1, x_2, \dots, x_n)=P(C_k)\prod_{i=1}^nP(x_i|C_k)
$$
这样根据样本中的特征出现频率, 就能得到各个先验概率, 从而推断出后验概率了.
分类准则
分母$P(\textbf x)$是一个常数, 从优化目标中略去. 只要满足分类器基于特征独立下, 预测目标的概率最大即可.
$$
\hat{y}=\arg\max\limits_{c \in y} P(c)\prod_{i=1}^dP(x_i|c)
$$
拉普拉斯平滑
如何处理概率为0的情况? 由于概率在分子上和分母上都是连乘形式, 如果其中一个为0则导致整个分类错误, 这显然不合理. 根据拉普拉斯平滑(也称为拉普拉斯修正), 对类别概率$P(c)$和预测中使用的先验概率$P(x_i|c)$进行修正, 如下:
$$
\begin{aligned}
\hat{P}(c) &= \frac{|D_c|+1}{|D|+N} \\
\hat{P}(x_i|c) &= \frac{|D_{c, x_i}|+1}{|D_c|+N_i}
\end{aligned}
$$
其中$D$代表数据集, $N$为可能的类别总数, $N_i$为第$i$个属性可能取值数,
离散和连续
如果是离散特征, 直接用特征的频率除以样本总数作为概率即可.
如果是连续特征, 必须要结合概率密度函数, 假设特征服从正态:
$$
G(x, \mu, \sigma) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}}
$$
因此$P(x_i|C_k)=G(x_i,\mu_{c,i}, \sigma_{c,i})$. $\mu_{c,i}$和$\sigma^2_{c,i}$分别是第$c$类样本在第$i$个特征上的均值和方差.
优缺点分析
优点:
- 既简单又快速,预测表现良好;
- 如果变量独立这个条件成立,相比Logistic回归等其他分类方法,朴素贝叶斯分类器性能更优,且只需少量训练数据;
- 相较于数值变量,朴素贝叶斯分类器在多个分类变量的情况下表现更好。若是数值变量,需要正态分布假设。
缺点:
- 如果分类变量的类别(测试数据集)没有在训练数据集总被观察到,那这个模型会分配一个0(零)概率给它,同时也会无法进行预测。这通常被称为“零频率”。为了解决这个问题,我们可以使用平滑技术,拉普拉斯估计是其中最基础的技术。
- 朴素贝叶斯也被称为bad estimator,所以它的概率输出predict_proba不应被太认真对待。
- 朴素贝叶斯的另一个限制是独立预测的假设。在现实生活中,这几乎是不可能的,各变量间或多或少都会存在相互影响。