Naive Bayes
文章目录
从贝叶斯定理到 naive bayes 分类器,最后说明一下其应用和优缺点。
在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出$ Y$和特征 $X $之间的关系,要么是决策函数 $𝑌=𝑓(𝑋) $(比如支持向量机),要么是条件分布 $𝑃(𝑌|𝑋) $(比如逻辑回归)。但是朴素贝叶斯却是生成方法,也就是直接找出特征输出 $Y $和特征 $X $的联合分布 $𝑃(𝑋,𝑌) $,然后用 $𝑃(𝑌|𝑋)= \frac{𝑃(𝑋,𝑌)}{𝑃(𝑋) }$得出。
朴素贝叶斯
贝叶斯学派的思想可以概括为先验概率+数据=后验概率。也就是说我们在实际问题中需要得到的后验概率,可以通过先验概率和数据一起综合得到。先验概率就是我们对于数据所在领域的历史经验,但是这个经验常常难以量化或者模型化,于是贝叶斯学派大胆的假设先验分布的模型,比如正态分布,beta分布等。(因为在没有计算之前就认为数据服从某个分布,所以被称为先验概率)
贝叶斯公式:
$$ P(Y | X)=\frac{P(X | Y) P(Y)}{P(X)} $$
- 先验概率 $P(X) $:先验概率是指根据以往经验和分析得到的概率。
- 后验概率 $P(Y|X) $:事情已经发生,要求这件事情发生的原因是由某个因素引起的可能性的大小,后验分布 $P(Y|X) $表示事件 $X $已经发生的前提下,事件 $Y $发生的概率,叫做事件 $X $发生下事件 $Y $的条件概率。(执果索因)
- 后验概率 $P(X|Y) $:在已知Y发生后X的条件概率,也由于知道 $Y $的取值而被称为 $X $的后验概率
- 朴素:朴素贝叶斯算法是假设各个特征之间相互独立,也是朴素这词的意思那么贝叶斯公式中的 $P(X|Y) $可写成:
$$ P(X | Y)=P\left(x_{1} | Y\right) P\left(x_{2} | Y\right) \cdots P\left(x_{n} | Y\right) $$
全概率公式: $$ P(X)=\sum_{k} P\left(X | Y=Y_{k}\right) $$ 其中 $\sum_{k} P(Y_k) =1$
所以,将上面的式子整合起来,得到朴素贝叶斯公式:
$$ P(Y | X)=\frac{P(X | Y_k) P(Y_k)}{\sum_{k} P(X | Y=Y_{k})} $$
三种常见的贝叶斯模型
上文提到了先验概率模型,这里主要介绍多项式模型(MultinomialNB)、高斯模型(GaussianNB)和伯努利模型(BernoulliNB)。
多项式模型(MultinomialNB)
多项式朴素贝叶斯常用语文本分类,特征是单词,值时单词出现的次数。多项式模型在计算先验概率 $P(Y_k) $和和条件概率 $P(X_i|Y_k) $时,会做出一些平滑处理(拉普拉斯平滑),具体公式为: $$ P\left(Y_{k}\right)=\frac{N_{Y_{k}}+\alpha}{N+K \alpha} $$
- $N$:样本数
- $N_{Y_k} $:类别为$Y_k$的样本数
- $K$:总的类别个数
- $\alpha$:平滑值
$$ P\left(x_{i} | Y_{k}\right)=\frac{N_{Y_{k}, x_{i}}+\alpha}{N_{Y_{k}}+n \alpha} $$
- $N_{Y_{k}, x_{i}}$:类别为$Y_k $,且特征为$X_i$的样本数
- $n$:特征$X_i $可以选择的数量
高斯模型(GaussianNB)
当特征是连续变量的时候,假设特征分布为正态分布,根据样本算出均值和方差,再求得概率。
可以参考这里.
** 伯努利模型(BernoulliNB)** 伯努利模型适用于离散特征的情况,伯努利模型中每个特征的取值只能是1和0。
可以参考这里
朴素贝叶斯分类的原理和流程
总体的公式: $$ p(类别 | 特征) = \frac {p(类别) * p特征|类别)}{p(特征)}$$
- 设特征 $x = { a _ { 1 } , a _ { 2 } , \ldots , a _ { m } }$, 其中 x 是一条数据, $a_i$ 是一个特征属性。
- 有类别信息 $C = { y _ { 1 } , y _ { 2 } , \ldots , y _ { n } }$
- 计算 $P ( y _ { 1 } | x ) , P ( y _ { 2 } | x ) , \ldots , P ( y _ { n } | x )$
- 如果 $P ( y _ { k } | x ) = \max { P ( y _ { 1 } | x ) , P ( y _ { 2 } | x ) , \ldots , P ( y _ { n } | x ) }$, 那么 $x \in y _ { k }$.
所以现在的关键步骤是如何计算第 3 步骤中的各个条件概率。可以这样做,
- 找到一个已知分类的待分类项集合,这个集合叫做训练样本集。
- 统计得到在各类别下各个特征属性的条件概率估计 $ P \left( a _ { 1 } | y _ { 1 } \right) , P \left( a _ { 2 } | y _ { 1 } \right) , \ldots , P \left( a _ { m } | y _ { 1 } \right) ; P \left( a _ { 1 } | y _ { 2 } \right) , P \left( a _ { 2 } | y _ { 2 } \right) , \ldots , P \left( a _ { m } | y _ { 2 } \right) ; \ldots ; P \left( a _ { 1 } | y _ { n } \right) , P \left( a _ { 2 } | y _ { n } \right) , \ldots , P \left( a _ { m } | y _ { n } \right) $
- 如果各个特征属性是条件独立的,则根据贝叶斯定理有如下推导
$$ P \left( y _ { i } | x \right) = \frac { P \left( x | y _ { i } \right) P \left( y _ { i } \right) } { P ( x ) } $$
因为分母对于所有类别为常数,因为我们只要将分子最大化皆可。又因为各特征属性是条件独立的,所以有: $$ P \left( x | y _ { i } \right) P \left( y _ { i } \right) = P \left( a _ { 1 } | y _ { i } \right) P \left( a _ { 2 } | y _ { i } \right) \ldots P \left( a _ { m } | y _ { i } \right) P \left( y _ { i } \right) = P \left( y _ { i } \right) \prod _ { j = 1 } ^ { m } P \left( a _ { j } | y _ { i } \right) $$
如果再计算过程中某个概率值为0,那么是可以考虑拉普拉斯平滑。两个概率计算公式,分子和分母都分别加上一个常数,就可以避免这个问题。
应用
朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,即认为此待分类项属于哪个类别。适用场景:
- 算法比较简单,在大样本下会有比较好的表现
- 对缺省数据不太敏感
- 具有支持增量式训练的能力(不借助于旧有训练数据,每一组新的训练数据都有可能引起概率值的变化,而如决策树和支持向量机,则需要我们一次性将整个数据集都传给它们。)对于一个如垃圾邮件过滤这样的应用程序而言,支持增量式训练的能力是非常重要的,因为过滤程序时常要对新到的邮件进行训练,然后必须即可进行相应的调整;更何况,过滤程序也未必有权限访问已经收到的所有邮件信息。
缺点:
- 不适合输入的向量有很强的特征关联的场景
- 无法处理基于特征值组合所产生的变化结果。例如:“在线”和“药店”分开出现时一般出现在正常邮件中,但当组合起来时“在线药店”却一般出现在垃圾邮件中,贝叶斯分类器无法理解这种特征组合。
它经常被用于文本分类中,包括互联网新闻的分类,垃圾邮件的筛选。
文章作者 jijeng
上次更新 2019-07-22