朴素贝叶斯算法是是基于贝叶斯定理与特征条件独立假设的分类方法。接下来我们就分别从贝叶斯原理和特征条件独立假设介绍贝叶斯算法。
条件概率是指:在事件 y y y已经发生的条件下,事件 x x x发生的概率。条件概率可表示为 P ( x ∣ y ) P(x|y) P(x∣y),其计算公式为:
P ( x ∣ y ) = P ( x , y ) P ( y ) P(x|y) = \frac{P(x,y)}{P(y)} P(x∣y)=P(y)P(x,y)
其中 P ( x , y ) P(x,y) P(x,y)就是联合概率,表示 x x x和 y y y两件事情同事发生的概率,而 P ( y ) P(y) P(y)和 P ( x ) P(x) P(x)就是先验概率,是根据以往的经验和分析得到的概率,就是通过训练集得到的统计概率。
全概率公式是指:如果事件 y 1 , y 2 , . . . , y n y_1,y_2,...,y_n y1,y2,...,yn可构成一个完备事件组,即它们两两互不相容,其和为全集。则对于事件 x x x有:
P ( x ∣ y ) = ∑ i = 1 n P ( y i ) P ( x ∣ y i ) P(x|y)=\sum_{i=1}^{n}P(y_i)P(x|y_i) P(x∣y)=i=1∑nP(yi)P(x∣yi)
既然有先验概率,那拥有后验概率是最直接的想法。后验概率是指,某事件 x x x已经发生,那么该事件是因为事件 y y y而发生的概率。后验概率以先验概率为基础,通过贝叶斯公式,用先验概率和似然函数计算出来。这里就引出了贝叶斯定理:
P ( x ∣ y ) = P ( y ∣ x ) P ( x ) P ( y ) P(x|y)=\frac{P(y|x)P(x)}{P(y)} P(x∣y)=P(y)P(y∣x)P(x)
贝叶斯算法正是利用以上信息求解后验概率,并根据后验概率的值来进行分类的。
根据条件概率公式, y y y发生条件下 x x x的概率为:
P ( x ∣ y ) = P ( x , y ) P ( y ) P(x|y)=\frac{P(x,y)}{P(y)} P(x∣y)=P(y)P(x,y)
x x x发生条件下 y y y的概率为:
P ( y ∣ x ) = P ( y , x ) P ( x ) P(y|x)=\frac{P(y,x)}{P(x)} P(y∣x)=P(x)P(y,x)
合并后得到:
P ( x ∣ y ) = P ( y ∣ x ) P ( x ) = P x ∣ y P ( y ) P(x|y)=P(y|x)P(x)=P{x|y}P(y) P(x∣y)=P(y∣x)P(x)=Px∣yP(y)
若 p ( y ) p(y) p(y)非零,两边同时除以 p ( y ) p(y) p(y)得到贝叶斯定理:
P ( x ∣ y ) = P ( y ∣ x ) P ( x ) P ( y ) P(x|y)=\frac{P(y|x)P(x)}{P(y)} P(x∣y)=P(y)P(y∣x)P(x)
首先对上述 x x x和 y y y扩展一下,有一个训练数据集 ( X , Y ) (X,Y) (X,Y),其中 x ∈ X x\in X x∈X,并且包含 n n n维特征,即 x = ( x − 1 , x 2 , . . . , x n ) x=(x-1,x_2,...,x_n) x=(x−1,x2,...,xn), y ∈ Y y\in Y y∈Y,共有 k k k种类别,即 y = ( y 1 , y 2 , . . . , y k ) y=(y_1,y_2,...,y_k) y=(y1,y2,...,yk)。
给定一个新的输入 x x x,需要判定它属于哪一个类别,从概率的角度来看,这个问题就是给定 x x x,它属于哪个类别的概率是最大的。那么问题就转化为求解 P ( y 1 ∣ x ) , P ( y 2 ∣ x ) , . . . , P ( y k ∣ x ) P(y_1|x),P(y_2|x),...,P(y_k|x) P(y1∣x),P(y2∣x),...,P(yk∣x)中最大的那个,即求后验概率最大的输出: a r g m a x y k P ( y k ∣ x ) argmax_{y_k}P(y_k|x) argmaxykP(yk∣x)
由贝叶斯定理可求:
P ( y k ∣ x ) = P ( x ∣ y k ) P ( y k ) P ( x ) P(y_k|x) = \frac{P(x|y_k)P(y_k)}{P(x)} P(yk∣x)=P(x)P(x∣yk)P(yk)
而根据全概率公式,可以求得
P ( x ) = ∑ i = 1 k P ( y i ) P ( x ∣ y i ) P(x)=\sum_{i=1}^{k}P(y_i)P(x|y_i) P(x)=i=1∑kP(yi)P(x∣yi)
就有:
P ( y k ∣ x ) = P ( x ∣ y k ) P ( y k ) ∑ i = 1 k P ( y i ) P ( x ∣ y i ) P(y_k|x) = \frac{P(x|y_k)P(y_k)}{\sum_{i=1}^{k}P(y_i)P(x|y_i)} P(yk∣x)=∑i=1kP(yi)P(x∣yi)P(x∣yk)P(yk)
其中 P ( y k ) P(y_k) P(yk)是可以通过统计训练集即可计算得到,重点是 P ( x ∣ y k ) P(x|y_k) P(x∣yk)的计算,我们将其分解:
P ( x ∣ y k ) = P ( x 1 , x 2 , . . . , x n ∣ y k ) P(x|y_k)=P(x_1,x_2,...,x_n|y_k) P(x∣yk)=P(x1,x2,...,xn∣yk)
现在假设 x i x_i xi特征的可选值由 s i s_i si个,那么很容易算的其参数个数为 k ∏ i = 1 n s i k\prod_{i=1}^{n}s_i k∏i=1nsi,其参数规模是指数级别的。
所以就有了朴素贝叶斯,它非常纯真可爱,它假设这些特征 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn之间是相互独立的,那么就有:
P ( x ∣ y k ) = P ( x 1 , x 2 , . . . , x n ∣ y k ) = ∏ i = 1 n P ( x i ∣ y k ) P(x|y_k)=P(x_1,x_2,...,x_n|y_k)=\prod_{i=1}^{n}P(x_i|y_k) P(x∣yk)=P(x1,x2,...,xn∣yk)=i=1∏nP(xi∣yk)
参数个数降低到了 k ∑ i = 1 n s i k\sum_{i=1}^{n}s_i k∑i=1nsi。
结合上一节的结论,很容易计算得到:
P ( y k ∣ x ) = P ( x ∣ y k ) P ( y k ) ∑ i = 1 k P ( y i ) P ( x ∣ y i ) = P ( y k ) ∏ i = 1 n P ( x i ∣ y k ) ∑ i = 1 k P ( y i ) ∏ i = 1 n P ( x i ∣ y k ) P(y_k|x) = \frac{P(x|y_k)P(y_k)}{\sum_{i=1}^{k}P(y_i)P(x|y_i)} \\ =\frac{P(y_k)\prod_{i=1}^{n}P(x_i|y_k)}{\sum_{i=1}^{k}P(y_i)\prod_{i=1}^{n}P(x_i|y_k)} P(yk∣x)=∑i=1kP(yi)P(x∣yi)P(x∣yk)P(yk)=∑i=1kP(yi)∏i=1nP(xi∣yk)P(yk)∏i=1nP(xi∣yk)
则朴素贝叶斯分类器的表达式为:
f ( x ) = a r g m a x y k P ( y k ∣ x ) = a r g m a x y k P ( y k ) ∏ i = 1 n P ( x i ∣ y k ) ∑ i = 1 k P ( y i ) ∏ i = 1 n P ( x i ∣ y k ) f(x)=argmax_{y_k}P(y_k|x)=argmax_{y_k}\frac{P(y_k)\prod_{i=1}^{n}P(x_i|y_k)}{\sum_{i=1}^{k}P(y_i)\prod_{i=1}^{n}P(x_i|y_k)} f(x)=argmaxykP(yk∣x)=argmaxyk∑i=1kP(yi)∏i=1nP(xi∣yk)P(yk)∏i=1nP(xi∣yk)
很明显,对于分母 ∑ i = 1 k P ( y i ) ∏ i = 1 n P ( x i ∣ y k ) \sum_{i=1}^{k}P(y_i)\prod_{i=1}^{n}P(x_i|y_k) ∑i=1kP(yi)∏i=1nP(xi∣yk)其值是恒定的,因此朴素贝叶斯分类器的最终表达式为:
f ( x ) = a r g m a x y k P ( y k ) ∏ i = 1 n P ( x i ∣ y k ) f(x) = argmax_{y_k}P(y_k)\prod_{i=1}^{n}P(x_i|y_k) f(x)=argmaxykP(yk)i=1∏nP(xi∣yk)
接下来就只需要计算好 P ( y k ) P(y_k) P(yk)和 P ( x i ∣ y k ) P(x_i|y_k) P(xi∣yk)即可。
上一节末尾我们已经推导出朴素贝叶斯分类器的基本公式,只需要再计算先验概率 P ( y k ) P(y_k) P(yk)和条件概率 P ( x i ∣ y k ) P(x_i|y_k) P(xi∣yk)即可。而在实际的应用中,不同的场景应用不同的计算模型。一般有三种模型:
多项式模型适用于特征值取值为离散值,并且较多的场景,如风险等级为取值为高中低等特征。它在计算先验概率和条件概率时会加一个平滑处理,其具体计算方法为:
P ( y k ) = N y k + α N + k α P(y_k)=\frac{N_{y_k}+\alpha}{N+k\alpha} P(yk)=N+kαNyk+α
P ( x i ∣ y k ) = N ( y k , x i ) + α N y k + n α P(x_i|y_k)=\frac{N_{(y_k,x_i)}+\alpha}{N_{y_k} + n\alpha} P(xi∣yk)=Nyk+nαN(yk,xi)+α
其中 N y k N_{y_k} Nyk是类别为 y k y_k yk的样本个数, n n n是特征的维数, N ( y k , x i ) N_{(y_k,x_i)} N(yk,xi)是类别为 y k y_k yk的样本中,第 i i i维特征的值是 x i x_i xi的样本个数, α \alpha α是平滑参数。
为什么需要平滑?在有些应用中,如文本分类任务中,可能存在有些词语压根儿就没出现过,那么就可能导致 N ( y k , x i ) N_{(y_k,x_i)} N(yk,xi)为零,这就会导致 P ( x i ∣ y k ) P(x_i|y_k) P(xi∣yk)为0,这显然不大合理,总不能因某个因素观察到老天爷没下雨,就说老天爷永远不下雨吧。
在实际的应用过程中可以使用sklearn.naive_bayes.MultinomialNB函数实现,传入合适参数 α \alpha α即可完成分类器的训练。
高斯模型其特征取值为连续型,如身高、距离等。
在实际的应用中可以使用sklearn.naive_bayes.GaussianNB,即可完成分类器的训练。
与多项式模型一样,伯努利模型适用于离散特征的情况,但不同的是,伯努利模型中每个特征的取值只能是1和0(以文本分类为例,某个单词在文档中出现过,则其特征值为1,否则为0)。
伯努利模型中,条件概率 P ( x i ∣ y k ) P(x_i|y_k) P(xi∣yk)的计算方式是:
当特征值 x i x_i xi为1时, P ( x i ∣ y k ) = P ( x i = 1 ∣ y k ) P(x_i|y_k)=P(x_i=1|y_k) P(xi∣yk)=P(xi=1∣yk);
当特征值 x i x_i xi为0时, P ( x i ∣ y k ) = 1 − P ( x i = 1 ∣ y k ) P(x_i|y_k)=1−P(x_i=1|y_k) P(xi∣yk)=1−P(xi=1∣yk)。
在实际的应用中可以使用sklearn.naive_bayes.BernoulliNB,即可完成分类器的训练。
感谢阅读。
如果觉得文章对你有所帮助,欢迎打赏哦~