朴素贝叶斯法(通俗易懂版本)
一.先验概率与后验概率
1.先验概率
对于一个未知的事情根据经验产生的概率称之为先验概率,不需要样本数据,也不受任何数据影响。
2.后验概率
概率论中贝叶斯公式就是计算后验概率的。先验概率与后验概率是相互依存,不可分开的,即具有后验概率肯定是知道先验概率,而先验概率是后验概率的基础。
3.两者的具体区分与例子
例子1:一个学校有60%的男生,40%的女生,学校有10%的学生戴眼镜,假设随机挑选一个同学,戴眼镜的男生概率是15%,戴眼镜的女生概率是5%,那么随机挑选一个戴眼镜的学生,学生为男生的后验概率P(男生|戴眼镜)。
请注意,在这个题目中问的是学生是男生的后验概率,P(男生)=0.6是这道题目的先验概率,不受戴眼镜的因素的影响,而P(戴眼镜)=0.15不是先验概率,只是一个普通的概率,一定要注意先验概率与后验概率的相互依存性,根据题目的设定而定
例子2:一个水果店出售两种水果:苹果和橙子,60%是苹果,40%是橙子,已经苹果中有10%是绿色的,橙子中有20%是绿色的,那么随机体现一个绿色的果实,这个果实是苹果的后验概率P(苹果|绿色)
在这个例子中,问的是果实是苹果的后验概率,则P(苹果)=0.6,是先验概率
二.朴素贝叶斯法
1.概念
朴素贝叶斯法是根据贝叶斯公式和特征条件独立假设的分类方法,即朴素贝叶斯法在应用时最主要的两个原则就是贝叶斯公式和独立假设,因为独立假设使得问题简单化,所以称为朴素贝叶斯或者简单贝叶斯。
对于给定的训练集,首先通过学习得到输入输出的联合分布的模型,然后根据此模型,对于给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。后验概率最大化等价于第一章提到的期待风险最小化。
由浅入深例子:上述的例子2中,随机取出一个绿色的果实,如果果实是苹果的后验概率是0.78,而果实是橙子的后验概率是0.35,则对于任意的一个绿色果实,机器模型给出的结果就是苹果。
2.朴素贝叶斯法涉及到的概率知识
1.如果X和Y 相互独立,则
P
(
X
,
Y
)
=
P
(
X
)
P
(
Y
)
;
P(X,Y)=P(X)P(Y);
P(X,Y)=P(X)P(Y);
2.条件概率公式:
P
(
Y
∣
X
)
=
P
(
X
,
Y
)
/
P
(
X
)
P
(
X
∣
Y
)
=
P
(
X
,
Y
)
/
P
(
Y
)
得到
P
(
Y
∣
X
)
=
P
(
X
∣
Y
)
P
(
Y
)
/
P
(
X
)
.
P(Y|X)=P(X,Y)/P(X) \\ P(X|Y)=P(X,Y)/P(Y)\\ 得到 P(Y|X)=P(X|Y)P(Y)/P(X).
P(Y∣X)=P(X,Y)/P(X)P(X∣Y)=P(X,Y)/P(Y)得到P(Y∣X)=P(X∣Y)P(Y)/P(X).
深刻理解:上面的最后一个公式已经深刻描述了朴素贝叶斯的精髓P(X|Y)与P(Y|X)的关系。
根据上面的公式来理解一个常见的例子,垃圾邮件分类,别人给我发来一个邮件,如何根据邮件内容判断是否为垃圾邮件?
就是求P(垃圾邮件|邮件内容),我们可以知道的是根据大量的垃圾邮件来训练,知道这些垃圾邮件经常出现的邮件内容,即知道P(邮件内容|垃圾邮件)。
根据上面的公式
P
(
垃圾邮件
∣
邮件内容)
=
P
(
邮件内容
∣
垃圾邮件)
∗
P
(
垃圾邮件)
P
(邮件内容)
P(垃圾邮件|邮件内容)=\frac{P(邮件内容|垃圾邮件)*P(垃圾邮件)}{P(邮件内容)}
P(垃圾邮件∣邮件内容)=P(邮件内容)P(邮件内容∣垃圾邮件)∗P(垃圾邮件)
P
(
非垃圾
∣
邮件内容)
=
P
(
邮件内容
∣
非垃圾邮件)
∗
P
(
非垃圾)
P
(邮件内容)
P(非垃圾|邮件内容)=\frac{P(邮件内容|非垃圾邮件)*P(非垃圾)}{P(邮件内容)}
P(非垃圾∣邮件内容)=P(邮件内容)P(邮件内容∣非垃圾邮件)∗P(非垃圾)
注意一点就是:其实P(邮件内容)的概率是没有用处的,因为判断是否为垃圾邮件,最重要的是上面分子的概率。
此时问题转化为求这两个概率,P(邮件内容|垃圾邮件)与P(垃圾邮件)。
其中P(垃圾邮件)是这道题目的先验概率,是根据以往的数据集训练出来的。
利用大数定律,当样本足够多时,垃圾邮件出现的频率就是P(垃圾邮件)。
关键在于P(邮件内容|垃圾邮件),每一封邮件作为一个样本,关键是根据训练的过程中找到几个垃圾邮件的标志性词汇(注意是以词语为基础,而不是以单个字为基础),比如“恭喜”,“奖励”等等作为样本的特征,在后文中以字母A,B,C…代替一封邮件的的特征。
注意体会垃圾邮件分类中模型的建立过程。
在朴素贝叶斯法假设,样本的特征之间是相互独立的,即
P(邮件内容|垃圾邮件)=P(A|垃圾邮件)*P(B|垃圾邮件)*P(C|垃圾邮件)…
那么如果有一个词汇,并没有在训练集中出现,不能简单的把概率视为0,对于乘积而言,一旦为0,整体结果也就为0,所以采用一种方法叫拉普拉斯平滑,他的主要思想是,这个新出现的词汇是1,同时也把所有的特征词+1。
此时对于每个特征词汇的概率计算就成了:
P
(
e
)
=
c
(
e
)
+
1
N
+
∣
E
∣
P(e)=\frac{c(e)+1}{N+|E|}
P(e)=N+∣E∣c(e)+1
c(e) 是事件 e 在训练数据中出现的次数。
N 是训练数据中所有事件的总数。
∣E∣ 是事件集合 E 的大小。
分母中的 N+∣E∣ 是为了平滑,其中 N是所有事件的总数,而 ∣E∣ 是为了给未观察到的事件也分配一定的概率,如果不理解,后面还有具体的例子。
3.全概率公式 :
P
(
X
)
=
∑
k
P
(
X
∣
Y
=
Y
k
)
P
(
Y
k
)
其中
∑
k
P
(
Y
k
)
=
1
P(X) = \sum_{k} P(X \mid Y=Y_k) P(Y_k) \text{其中} \sum_{k} P(Y_k) = 1
P(X)=k∑P(X∣Y=Yk)P(Yk)其中k∑P(Yk)=1
4.由此得到贝叶斯公式:
P
(
Y
k
∣
X
)
=
P
(
X
∣
Y
k
)
P
(
Y
k
)
∑
k
P
(
X
∣
Y
=
Y
k
)
P
(
Y
k
)
P(Y_k \mid X) = \frac{P(X \mid Y_k) P(Y_k)}{\sum_k P(X \mid Y=Y_k) P(Y_k)}
P(Yk∣X)=∑kP(X∣Y=Yk)P(Yk)P(X∣Yk)P(Yk)
2.朴素贝叶斯的例子
我们由一个竞赛中的真实案例引出概念,在看这个例子之前还是要好好看一下上面给出的朴素贝叶斯的概念,这样会比较好理解一些。
假设你有一个电子邮件数据集,其中包含标记为“垃圾邮件”和“非垃圾邮件”的邮件。你的目标是构建一个分类器,能够自动将新的邮件分类为“垃圾邮件”或“非垃圾邮件”。
数据集特征:
邮件长度(特征1):邮件的字数。
包含特定关键词的次数(特征2):邮件中包含“赢取”、“立即行动”等关键词的次数
是否包含可疑链接(特征3):邮件中是否包含可疑的URL链接。
发送者是否在联系人列表中(特征4):邮件发送者是否是收件人联系人列表中的一员。
邮件发送时间(特征5):邮件发送的时间(例如,工作日/周末,白天/晚上)。
邮件长度 | 关键词次数 | 包含可疑链接 | 发送者在联系人列表中 | 邮件发送时间 | 邮件类型(标签) |
---|---|---|---|---|---|
100 | 0 | 否 | 是 | 工作日白天 | 非垃圾邮件 |
200 | 2 | 是 | 否 | 工作日晚上 | 垃圾邮件 |
150 | 1 | 否 | 是 | 周末白天 | 非垃圾邮件 |
300 | 3 | 是 | 否 | 工作日白天 | 垃圾邮件 |
… | … | … | … | … | … |
由于需要大量的数据,下面只是给出计算的关键步骤,下面的例子里面给出具体的计算步骤。
步骤一:计算先验概率P(垃圾邮件),即在大量样本中,垃圾邮件占总数的比例。
步骤二:计算条件概率
对应的就是上面的这个步骤P(邮件内容|垃圾邮件)=P(A|垃圾邮件)*P(B|垃圾邮件)*P(C|垃圾邮件)…
只不过在上面的题目我们假设一封邮件的特征是几个词汇,即ABC,在这道题目我们假设的特征是上文提到的5个特征。
P(邮件内容|垃圾邮件)=P(邮件长度|垃圾邮件)*P(包含特定关键词的次数|垃圾邮件)*P(是否包含可疑链接|垃圾邮件)*P(发送者是否在联系人列表中|垃圾邮件)*P( 邮件发送时间|垃圾邮件)
构建常见分布模型
①邮件长度
遵循正态分布
P
(
邮件长度
∣
垃圾邮件
)
=
1
2
π
σ
1
2
e
−
(
x
1
−
μ
1
)
2
2
σ
1
2
P(邮件长度|垃圾邮件) = \frac{1}{\sqrt{2\pi\sigma_1^2}} e^{-\frac{(x_1-\mu_1)^2}{2\sigma_1^2}}
P(邮件长度∣垃圾邮件)=2πσ121e−2σ12(x1−μ1)2
P
(
垃圾邮件
∣
非垃圾邮件
)
=
1
2
π
σ
2
2
e
−
(
x
1
−
μ
2
)
2
2
σ
2
2
P(垃圾邮件|非垃圾邮件) = \frac{1}{\sqrt{2\pi\sigma_2^2}} e^{-\frac{(x_1-\mu_2)^2}{2\sigma_2^2}}
P(垃圾邮件∣非垃圾邮件)=2πσ221e−2σ22(x1−μ2)2
②包含特定关键词的次数
遵循正态分布
P
(
包含特定关键词的次数
∣
垃圾邮件
)
=
1
2
π
σ
3
2
e
−
(
x
1
−
μ
3
)
2
2
σ
3
2
P(包含特定关键词的次数|垃圾邮件) = \frac{1}{\sqrt{2\pi\sigma_3^2}} e^{-\frac{(x_1-\mu_3)^2}{2\sigma_3^2}}
P(包含特定关键词的次数∣垃圾邮件)=2πσ321e−2σ32(x1−μ3)2
P
(
包含特定关键词的次数
∣
非垃圾邮件
)
=
1
2
π
σ
4
2
e
−
(
x
1
−
μ
4
)
2
2
σ
4
2
P(包含特定关键词的次数|非垃圾邮件) = \frac{1}{\sqrt{2\pi\sigma_4^2}} e^{-\frac{(x_1-\mu_4)^2}{2\sigma_4^2}}
P(包含特定关键词的次数∣非垃圾邮件)=2πσ421e−2σ42(x1−μ4)2
③是否包含可疑链接 遵循伯努利分布
④发送者是否在联系人列表中 遵循伯努利分布
⑤邮件发送时间 遵循多项分布(二项分布的推广)
步骤三
对于一个新的邮件样本,我们使用贝叶斯定理来计算邮件属于每个类别的后验概率。
P
(
垃圾邮件
∣
邮件内容)
=
P
(
邮件内容
∣
垃圾邮件)
∗
P
(
垃圾邮件)
P
(邮件内容)
P(垃圾邮件|邮件内容)=\frac{P(邮件内容|垃圾邮件)*P(垃圾邮件)}{P(邮件内容)}
P(垃圾邮件∣邮件内容)=P(邮件内容)P(邮件内容∣垃圾邮件)∗P(垃圾邮件)
P
(
非垃圾
∣
邮件内容)
=
P
(
邮件内容
∣
非垃圾邮件)
∗
P
(
非垃圾)
P
(邮件内容)
P(非垃圾|邮件内容)=\frac{P(邮件内容|非垃圾邮件)*P(非垃圾)}{P(邮件内容)}
P(非垃圾∣邮件内容)=P(邮件内容)P(邮件内容∣非垃圾邮件)∗P(非垃圾)
还是啰嗦一句,根据后验概率最大化,只要求分子最大即可,无需判断分母。
如果对于前两个特征为什么选择正态分布不理解,那么可以想象一下,我们的班级成绩分布就是正态分布,对于高考数学而言,分数大部分也就是集中在60-90处于最高峰,同样的,当有大量表示邮件长度的数字时,同理也是集中在某一些数值。对于是否是可以链接以及是否在联系人列表中,对于多次的独立重复的0-1试验,我们称之为伯努利分布,当实验结果多于两项时,我们称之为多项分布。
3.具体例子
假设参数
邮件类型先验概率:
- 非垃圾邮件: P ( C 1 ) = 0.8 P(C_1) = 0.8 P(C1)=0.8
- 垃圾邮件: P ( C 2 ) = 0.2 P(C_2) = 0.2 P(C2)=0.2
高斯分布参数(邮件长度和关键词次数):
- 非垃圾邮件:
- 邮件长度: u 1 = 150 , σ 1 = 50 u_1 = 150, \sigma_1 = 50 u1=150,σ1=50
- 关键词次数: u 3 = 1 , σ 3 = 1 u_3 = 1, \sigma_3 = 1 u3=1,σ3=1
- 垃圾邮件:
- 邮件长度: u 2 = 250 , σ 2 = 70 u_2 = 250, \sigma_2 = 70 u2=250,σ2=70
- 关键词次数: u 4 = 3 , σ 4 = 2 u_4 = 3, \sigma_4 = 2 u4=3,σ4=2
伯努利分布参数(是否包含可疑链接和发送者是否在联系人列表中):
- 是否包含可疑链接:
- 非垃圾邮件: p 1 = 0.1 p_1 = 0.1 p1=0.1
- 垃圾邮件: p 2 = 0.7 p_2 = 0.7 p2=0.7
- 发送者是否在联系人列表中:
- 非垃圾邮件: q 1 = 0.9 q_1 = 0.9 q1=0.9
- 垃圾邮件: q 2 = 0.3 q_2 = 0.3 q2=0.3
多项分布参数(邮件发送时间):
- 非垃圾邮件: P ( F 5 ∣ C 1 ) = [ 0.5 , 0.5 ] P(F_5|C_1) = [0.5, 0.5] P(F5∣C1)=[0.5,0.5] (工作日/周末)
- 垃圾邮件: P ( F 5 ∣ C 2 ) = [ 0.3 , 0.7 ] P(F_5|C_2) = [0.3, 0.7] P(F5∣C2)=[0.3,0.7] (工作日/周末)
新邮件样本特征:
- 邮件长度: F 1 = 200 F_1 = 200 F1=200
- 关键词次数: F 2 = 1 F_2 = 1 F2=1
- 是否包含可疑链接:否 F 3 = 0 F_3 = 0 F3=0
- 发送者在联系人列表中:是 F 4 = 1 F_4 = 1 F4=1
- 邮件发送时间:工作日晚上
{P(邮件内容|非垃圾邮件)*P(非垃圾邮件)=
1
2
π
5
0
2
−
(
200
−
150
)
2
2
∗
5
0
2
∗
1
2
π
1
2
−
(
1
−
1
)
2
2
∗
1
2
∗
0.9
∗
0.9
∗
0.5
∗
0.8
≈
0.218
\frac{1}{\sqrt{2\pi50^2}}\frac{-(200-150)^2}{2*50^2}*\frac{1}{\sqrt{2\pi1^2}}\frac{-(1-1)^2}{2*1^2}*0.9*0.9*0.5*0.8≈0.218
2π50212∗502−(200−150)2∗2π1212∗12−(1−1)2∗0.9∗0.9∗0.5∗0.8≈0.218
{P(邮件内容|垃圾邮件)*P(垃圾邮件)=
1
2
π
7
0
2
−
(
250
−
150
)
2
2
∗
7
0
2
∗
1
2
π
2
2
−
(
1
−
3
)
2
2
∗
2
2
∗
0.3
∗
0.3
∗
0.3
∗
0.2
≈
0.000038
\frac{1}{\sqrt{2\pi70^2}}\frac{-(250-150)^2}{2*70^2}*\frac{1}{\sqrt{2\pi2^2}}\frac{-(1-3)^2}{2*2^2}*0.3*0.3*0.3*0.2≈0.000038
2π70212∗702−(250−150)2∗2π2212∗22−(1−3)2∗0.3∗0.3∗0.3∗0.2≈0.000038
由于0.218>0.000038所以认为这个邮件是非垃圾邮件。
2.朴素贝叶斯的应用
步骤一:计算P(Y)的概率 P(Y=1)=3/5,P(Y=-1)=2/5
步骤二:计算P(X|Y)
P(X|Y)=
P
(
X
(
1
)
∣
Y
)
∗
P
(
X
(
2
)
∣
Y
)
P(X^{(1)}|Y)*P(X^{(2)}|Y)
P(X(1)∣Y)∗P(X(2)∣Y)
P
(
X
(
1
)
=
1
∣
Y
=
1
)
=
2
/
9
,
P
(
X
(
1
)
=
2
∣
Y
=
1
)
=
1
/
3
P
(
X
(
1
)
=
3
∣
Y
=
1
)
=
4
/
9
,
P
(
X
(
2
)
=
S
∣
Y
=
1
)
=
1
/
9
P
(
X
(
2
)
=
M
∣
Y
=
1
)
=
3
/
9
,
P
(
X
(
2
)
=
L
∣
Y
=
1
)
=
5
/
9
P
(
X
(
1
)
=
1
∣
Y
=
−
1
)
=
1
/
2
,
P
(
X
(
1
)
=
2
∣
Y
=
−
1
)
=
1
/
3
P
(
X
(
1
)
=
3
∣
Y
=
−
1
)
=
1
/
6
,
P
(
X
(
2
)
=
S
∣
Y
=
−
1
)
=
1
/
2
P
(
X
(
2
)
=
M
∣
Y
=
−
1
)
=
1
/
3
,
P
(
X
(
2
)
=
L
∣
Y
=
−
1
)
=
1
/
6
P(X^{(1)}=1|Y=1)=2/9,P(X^{(1)}=2|Y=1)=1/3\\ P(X^{(1)}=3|Y=1)=4/9,P(X^{(2)}=S|Y=1)=1/9\\ P(X^{(2)}=M|Y=1)=3/9,P(X^{(2)}=L|Y=1)=5/9\\ P(X^{(1)}=1|Y=-1)=1/2,P(X^{(1)}=2|Y=-1)=1/3\\ P(X^{(1)}=3|Y=-1)=1/6,P(X^{(2)}=S|Y=-1)=1/2\\ P(X^{(2)}=M|Y=-1)=1/3,P(X^{(2)}=L|Y=-1)=1/6
P(X(1)=1∣Y=1)=2/9,P(X(1)=2∣Y=1)=1/3P(X(1)=3∣Y=1)=4/9,P(X(2)=S∣Y=1)=1/9P(X(2)=M∣Y=1)=3/9,P(X(2)=L∣Y=1)=5/9P(X(1)=1∣Y=−1)=1/2,P(X(1)=2∣Y=−1)=1/3P(X(1)=3∣Y=−1)=1/6,P(X(2)=S∣Y=−1)=1/2P(X(2)=M∣Y=−1)=1/3,P(X(2)=L∣Y=−1)=1/6
步骤三:P(Y|X)=
P
(
X
∣
Y
)
P
(
Y
)
P
(
X
)
\frac{P(X|Y)P(Y)}{P(X)}
P(X)P(X∣Y)P(Y),进行预测
同样不需要计算P(X),P(X|Y=1)*P(Y=1)=1/3✖1/9✖3/5=
1
45
\frac{1}{45}
451
P(X|Y=-1)*P(Y=-1)=1/3✖1/2✖2/5=
1
15
\frac{1}{15}
151
由于
1
15
>
1
45
\frac{1}{15}>\frac{1}{45}
151>451所以取 y=-1。
当然其实可以看出 在第二步的很多概率其实不需要计算,只要根据我们的需求计算出来在第三步需要应用的即可,这需要我们大量的练习。
在上面我们也讲到了拉普拉斯平滑算法,就是书本上的贝叶斯估计。
我们再使用拉普拉斯平滑算法重新做一下上面的题目,
第一步: 先验概率的贝叶斯估计方法:
==由于我们有两个分类每个分类都加1,所以K
λ
\lambda
λ=2
P
(
Y
=
1
)
=
9
+
1
/
15
+
2
=
10
/
17
,
P
(
Y
=
−
1
)
=
6
+
1
/
15
+
2
=
7
/
17
,
P(Y=1)=9+1/15+2=10/17,\\ P(Y=-1)=6+1/15+2=7/17,
P(Y=1)=9+1/15+2=10/17,P(Y=−1)=6+1/15+2=7/17,
第二步:
P
(
X
(
1
)
=
2
∣
Y
=
1
)
=
3
+
1
/
9
+
3
=
1
/
3
,
P
(
X
(
2
)
=
S
∣
Y
=
1
)
=
1
+
1
/
9
+
3
=
1
/
6
,
P
(
X
(
1
)
=
2
∣
Y
=
−
1
)
=
2
+
1
/
6
+
3
=
1
/
3
,
P
(
X
(
2
)
=
S
∣
Y
=
−
1
)
=
3
+
1
/
6
+
3
=
4
/
9
P(X^{(1)}=2|Y=1)=3+1/9+3=1/3,\\ P(X^{(2)}=S|Y=1)=1+1/9+3=1/6,\\ P(X^{(1)}=2|Y=-1)=2+1/6+3=1/3,\\ P(X^{(2)}=S|Y=-1)=3+1/6+3=4/9
P(X(1)=2∣Y=1)=3+1/9+3=1/3,P(X(2)=S∣Y=1)=1+1/9+3=1/6,P(X(1)=2∣Y=−1)=2+1/6+3=1/3,P(X(2)=S∣Y=−1)=3+1/6+3=4/9
注意:对于Y来说,Y的分类有两种,相应的种类加1,总体分母+2,对于X的两种属性来说,分类都是3个,相应的种类都+1,所以总体的分母+3。
第三步:
P(X|Y=1)*P(Y=1)=10/17✖1/3✖1/6=
5
153
≈
0.032
\frac{5}{153}≈0.032
1535≈0.032
P(X|Y=-1)*P(Y=-1)=7/17✖3/9✖4/9=
28
459
≈
0.061
\frac{28}{459}≈0.061
45928≈0.061
由于0.061>0.032,所以y=-1