贝叶斯算法是一种分类算法,它以贝叶斯定理作为基础,因此被称为贝叶斯分类。其中“朴素贝叶斯”是贝叶斯分类中最基础的算法。
说到贝叶斯定理,不得不佩服伟大的数学家。不是说贝叶斯定理有多么复杂,而是真正的实用于我们的生活。
比如,当我们已知一件事情的条件概率 P ( A ∣ B ) P(A|B) P(A∣B),如何得知两条件对换后的条件概率 P ( B ∣ A ) P(B|A) P(B∣A)?贝叶斯定理则帮助了我们!在开始讲解贝叶斯定理前,首先要温习一下基本的概念。
P ( A ∣ B ) P(A|B) P(A∣B), 条件概率,表示事件B已经发生的前提下,事件A发生的概率,其求解公式为: P ( A ∣ B ) = P ( A B ) P ( B ) P(A|B)=\frac {P(AB)}{P(B)} P(A∣B)=P(B)P(AB)
条件概率的应用,举个例子而言,一个家庭里有2个小孩,其中一个小孩是女孩,那么另一个小孩是男孩的概率是多少?
设一个小孩是女孩为事件A,A={(女,男),(女,女),(男,女)}
设另一个小孩是男孩为事件B,B={(男,女), (女,男), (男,男)}
AB={(女,男), (男,女)}
则 P ( B ∣ A ) = P ( B A ) P ( A ) = 2 3 P(B|A)=\frac {P(BA)}{P(A)}=\frac{2}{3} P(B∣A)=P(A)P(BA)=32
条件概率的计算过程如上所示。在生活中,往往会出现这样一种情况,我们很容易的能得到 P ( A ∣ B ) P(A|B) P(A∣B)的概率,但我们却想要知道条件互换后的概率 P ( B ∣ A ) P(B|A) P(B∣A),这就用到了大名鼎鼎的“贝叶斯定理”!
这里先直接给出结论:
先验概率 P ( B ) P(B) P(B)求解 事实上,先验概率 P ( B ) P(B) P(B)在实际工作中很容易得到,利用大数定理(当样本足够多时,频率趋于稳定等于其概率),这样当训练样本充足时, P ( B ) P(B) P(B)可以使用各类出现的频率来代替。例如西瓜数据集中,好瓜坏瓜统计值占比即可体现其先验概率。
条件概率 P ( A ∣ B ) P(A | B ) P(A∣B)求解 条件概率,它表达的意思是在类别B中出现A的概率,它涉及到属性的联合概率问题,若只有一个离散属性还好,当属性多时采用频率估计起来就十分困难,因此这里一般采用极大似然法进行估计
前言曾提及,朴素贝叶斯作为最基础最简单的贝叶斯分类算法,为什么这样说?接下来你就会明白。
我们拿西瓜数据集来举例,数据集中有X特征属性,包括敲声,纹理等特征。最终分类集合有两种,好瓜和坏瓜,根据第一节贝叶斯定理的计算过程,我们可按照如下思路进行建模:
设 x = { a 1 , a 2 , . . . , a n } x=\{a_1,a_2,...,a_n\} x={a1,a2,...,an}为待分类的特征属性,如 a 1 a_1 a1: 敲声, a 2 a_2 a2: 纹理等;有类别集合 C = { y 1 , y 2 } C=\{y_1,y_2\} C={y1,y2}, 例如 y 1 y_1 y1: 好瓜, y 2 y_2 y2: 坏瓜;计算先验概率 P ( y 1 ) P(y_1) P(y1), P ( y 2 ) P(y_2) P(y2), 可根据统计值的频率替代概率。计算条件概率 P ( x ∣ y i ) P(x|y_i) P(x∣yi), 可通过乘法定理求得, P ( x ∣ y i ) = P ( x y i ) P ( y i ) P(x|y_i)=\frac{P(xy_i)}{P(y_i)} P(x∣yi)=P(yi)P(xyi), 由于分母对于整体而言是常数,因此只比较分子大小即可,而 P ( x y i ) = P ( a 1 ) ∗ P ( a 2 ∣ a 1 ) ∗ P ( a 3 ∣ a 2 a 1 ) . . . P ( a n ∣ a n − 1 . . . a 1 ) ∗ P ( y i ) P(xy_i)=P(a_1)*P(a_2|a_1)*P(a_3|a_2a_1)...P(a_n|a_{n-1}...a_1)*P(y_i) P(xyi)=P(a1)∗P(a2∣a1)∗P(a3∣a2a1)...P(an∣an−1...a1)∗P(yi)通过贝叶斯公式 P ( y i ∣ x ) = P ( x ∣ y i ) ∗ P ( y i ) P ( x ) P(y_i|x)=\frac{P(x|y_i)*P(y_i)}{P(x)} P(yi∣x)=P(x)P(x∣yi)∗P(yi),即可得到 P ( y i ∣ x ) P(y_i|x) P(yi∣x),即已知样本的特征属性,求其是好瓜还是坏瓜的概率。关于乘法公式,全概率公式,本文参考了这篇文章:https://blog.csdn.net/qq_31073871/article/details/81077386
在第一节中,我们了解了贝叶斯算法的求解步骤,首先根据类别的频率得到先验概率 P ( y i ) P(y_i) P(yi);随后,我们便要利用乘法原理计算条件概率。**重点来了!!!**朴素贝叶斯算法中,假设各属性之间相互独立,即条件独立假设。这样, 在第3步的条件概率计算中,公式可简化为如下版本:
这也是朴素贝叶斯计算的精华所在,有了条件独立假设,在计算各类下特征的条件概率则简单了许多。
上一小节是建立在特征是离散值的基础上,通过统计训练样本中各个特征在此分类下出现的频率即可方便的求出条件概率 P ( x i ∣ y i ) P(x_i|y_i) P(xi∣yi)。这一小节,主要针对特征是连续值时,该如何计算条件概率?
当特征为连续值时,通常可以将特征分布视为“高斯分布(正态分布)”,根据高斯分布的特征,只需计算出此连续特征的平均值和标准差,就可以描述此特征对应的概率密度。
即 P ( a k ∣ y i ) = g ( a k , η y i , σ y i ) P(a_k|y_i)=g(a_k,\eta_{y_i},\sigma_{y_i}) P(ak∣yi)=g(ak,ηyi,σyi)
若某一分类下的特征出现 P ( a i ∣ y i ) = 0 P(a_i|y_i)=0 P(ai∣yi)=0时,即此分类下没有某划分出来特征项样本,则会在计算条件概率的乘法公式中将结果置0,这将很大程度的影响着分类器的质量。为了避免这种情况的发生,通常会将此特征项计数值+1,避免0的出现!这种做法成为Laplace校准
应用:检测某短视频平台中账户是否为僵尸账号 类别 C = { 0 : 正 常 账 号 , 1 : 僵 尸 账 号 } C=\{0:正常账号, 1:僵尸账号\} C={0:正常账号,1:僵尸账号} 特征x: { a 1 : 每 日 活 跃 时 间 / 注 册 时 长 , a 2 : 好 友 数 量 / 注 册 时 长 , a 3 : 是 否 使 用 真 实 头 像 } \{a_1:每日活跃时间/注册时长,a_2:好友数量/注册时长,a_3:是否使用真实头像\} {a1:每日活跃时间/注册时长,a2:好友数量/注册时长,a3:是否使用真实头像}\
a 1 a_1 a1 a 2 a_2 a2 a 3 a_3 a3 a 1 < 0.08 a_1<0.08 a1<0.08 a 2 < 0.2 a_2<0.2 a2<0.20 0.08 < a 1 < 0.3 0.08<a_1<0.3 0.08<a1<0.3 0.2 < a 2 < 0.7 0.2<a_2<0.7 0.2<a2<0.71 a 1 > 0.3 a_1>0.3 a1>0.3 a 2 > 0.7 a_2>0.7 a2>0.7\目标:提供某账号的特征,分析此账号是否为僵尸账号。
Step1:梳理贝叶斯定理 P ( y ∣ x ) = P ( x ∣ y ) ∗ P ( y ) P ( x ) P(y|x) = \frac{P(x|y)*P(y)}{P(x)} P(y∣x)=P(x)P(x∣y)∗P(y)
Step2:计算先验概率 P ( y ) P(y) P(y) 根据后台人工统计的数据,分别统计出 P ( y 1 ) , P ( y 2 ) P(y_1),P(y_2) P(y1),P(y2)的概率,假如样本量为10000,其中真实账号有7800个,僵尸账号有2200个,那么: P ( y 1 ) = 0.78 P(y_1)=0.78 P(y1)=0.78 P ( y 2 ) = 0.22 P(y_2)=0.22 P(y2)=0.22
Step3:计算各分类各特征的条件概率
P ( a 1 < 0.08 ∣ C = 0 ) = 0.3 P(a_1<0.08|C=0)=0.3 P(a1<0.08∣C=0)=0.3; P ( 0.08 < a 1 < 0.3 ∣ C = 0 ) = 0.5 P(0.08<a_1<0.3|C=0)=0.5 P(0.08<a1<0.3∣C=0)=0.5; P ( a 1 > 0.3 ∣ C = 0 ) = 0.2 P(a_1>0.3|C=0)=0.2 P(a1>0.3∣C=0)=0.2;
P ( a 1 < 0.08 ∣ C = 1 ) = 0.8 P(a_1<0.08|C=1)=0.8 P(a1<0.08∣C=1)=0.8; P ( 0.08 < a 1 < 0.3 ∣ C = 1 ) = 0.1 P(0.08<a_1<0.3|C=1)=0.1 P(0.08<a1<0.3∣C=1)=0.1; P ( a 1 > 0.3 ∣ C = 1 ) = 0.1 P(a_1>0.3|C=1)=0.1 P(a1>0.3∣C=1)=0.1;
P ( a 2 < 0.2 ∣ C = 0 ) = 0.1 P(a_2<0.2|C=0)=0.1 P(a2<0.2∣C=0)=0.1; P ( 0.2 < a 2 < 0.7 ∣ C = 0 ) = 0.7 P(0.2<a_2<0.7|C=0)=0.7 P(0.2<a2<0.7∣C=0)=0.7; P ( a 2 > 0.3 ∣ C = 0 ) = 0.2 P(a_2>0.3|C=0)=0.2 P(a2>0.3∣C=0)=0.2;
P ( a 2 < 0.2 ∣ C = 1 ) = 0.7 P(a_2<0.2|C=1)=0.7 P(a2<0.2∣C=1)=0.7; P ( 0.2 < a 2 < 0.7 ∣ C = 1 ) = 0.2 P(0.2<a_2<0.7|C=1)=0.2 P(0.2<a2<0.7∣C=1)=0.2; P ( a 2 > 0.3 ∣ C = 1 ) = 0.1 P(a_2>0.3|C=1)=0.1 P(a2>0.3∣C=1)=0.1;
P ( a 3 = 0 ∣ C = 0 ) = 0.2 P(a_3=0|C=0)=0.2 P(a3=0∣C=0)=0.2; P ( a 3 = 1 ∣ C = 0 ) = 0.8 P(a_3=1|C=0)=0.8 P(a3=1∣C=0)=0.8; P ( a 3 = 0 ∣ C = 1 ) = 0.9 P(a_3=0|C=1)=0.9 P(a3=0∣C=1)=0.9; P ( a 3 = 1 ∣ C = 1 ) = 0.1 P(a_3=1|C=1)=0.1 P(a3=1∣C=1)=0.1;
建立完分类器后,对测试样本进行分类,若我们拿到一个账号,其特征为 a 1 = 0.1 , a 2 = 0.3 , a 3 = 0 a_1 = 0.1, a_2=0.3, a_3=0 a1=0.1,a2=0.3,a3=0
根据 P ( C ∣ x ) = P ( x ∣ C ) ∗ P ( C ) P ( x ) P(C|x) = \frac{P(x|C)*P(C)}{P(x)} P(C∣x)=P(x)P(x∣C)∗P(C),其中分母为常数,忽略之。
P ( x ∣ C = 0 ) ∗ P ( C = 0 ) = P ( C = 0 ) ∗ P ( 0.08 < a 1 < 0.3 ∣ C = 0 ) ∗ P ( 0.2 < a 2 < 0.7 ∣ C = 0 ) ∗ P ( a 3 = 0 ∣ C = 0 ) = 0.78 ∗ 0.5 ∗ 0.7 ∗ 0.2 = 0.0546 P(x|C=0)*P(C=0)=P(C=0)*P(0.08<a_1<0.3 | C=0)*P(0.2<a_2<0.7| C=0)*P(a_3=0|C=0)=0.78*0.5*0.7*0.2=0.0546 P(x∣C=0)∗P(C=0)=P(C=0)∗P(0.08<a1<0.3∣C=0)∗P(0.2<a2<0.7∣C=0)∗P(a3=0∣C=0)=0.78∗0.5∗0.7∗0.2=0.0546
P ( x ∣ C = 1 ) ∗ P ( C = 1 ) = P ( C = 1 ) ∗ P ( 0.08 < a 1 < 0.3 ∣ C = 1 ) ∗ P ( 0.2 < a 2 < 0.7 ∣ C = 1 ) ∗ P ( a 3 = 0 ∣ C = 1 ) = 0.22 ∗ 0.1 ∗ 0.2 ∗ 0.9 = 0.00396 P(x|C=1)*P(C=1)=P(C=1)*P(0.08<a_1<0.3 | C=1)*P(0.2<a_2<0.7| C=1)*P(a_3=0|C=1)=0.22*0.1*0.2*0.9=0.00396 P(x∣C=1)∗P(C=1)=P(C=1)∗P(0.08<a1<0.3∣C=1)∗P(0.2<a2<0.7∣C=1)∗P(a3=0∣C=1)=0.22∗0.1∗0.2∗0.9=0.00396
可以看到,通过朴素贝叶斯分类器,更倾向于将此账号划分为正常账号!