朴素贝叶斯
1、什么是朴素贝叶斯算法
(1)字面理解:朴素贝叶斯 = “朴素”+贝叶斯
朴素:假定特征之间都是条件独立的(这里理解起来比较抽象,后续使用具体实例说明)
贝叶斯:贝叶斯定理
p
(
y
∣
x
)
=
p
(
x
∣
y
)
?
p
(
y
)
p
(
x
)
证
明
:
p
(
x
,
y
)
=
p
(
x
∣
y
)
?
p
(
y
)
=
p
(
y
∣
x
)
?
p
(
x
)
移
项
得
:
p
(
y
∣
x
)
=
p
(
x
∣
y
)
?
p
(
y
)
p
(
x
)
p(y|x) = \frac{p(x|y)*p(y)}{p(x)} \\证明:p(x,y) = p(x|y)*p(y) = p(y|x)*p(x)\\移项得:p(y|x) = \frac{p(x|y)*p(y)}{p(x)}
p(y∣x)=p(x)p(x∣y)?p(y)?证明:p(x,y)=p(x∣y)?p(y)=p(y∣x)?p(x)移项得:p(y∣x)=p(x)p(x∣y)?p(y)? 说明:
1)p(y|x):后验概率
2)p(x|y):似然概率
3)p(y):先验概率
4)p(x):样本数据的所有特征
(2)官方解释:朴素贝叶斯分类(NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入X求出使得后验概率最大的输出Y。(来自于百度百科)
2、朴素贝叶斯的应用
1)各类文本分析的任务,比如垃圾邮件的分类,文本主题分类,情感分析
2)文字识别
3)图像识别
3、使用朴素贝叶斯对垃圾邮件进行分类
这里用一个具体的实例来分享朴素贝叶斯模型,能够更直观的理解朴素贝叶斯模型
3.1、朴素贝叶斯对垃圾邮件分类的两个步骤
1)统计出每一个单词对一个邮件成为垃圾邮件或正常邮件的概率
2)用这些统计的结果对一个新的邮件做预测
3.2、实现
1)例:现若干邮件,其中有正常邮件,有垃圾邮件,邮件中出现了”购买“,”物品“,”不是“,”广告“,”这“等词…我们分别统计这些词出现在正常邮件中的个数,出现在垃圾邮件中的个数
则正常邮件含有”购买“,”物品“,”不是“,”广告“,”这“词的概率为
p
(
购
买
∣
正
常
邮
件
)
=
1
80
p
(
物
品
∣
正
常
邮
件
)
=
1
60
p
(
不
是
∣
正
常
邮
件
)
=
1
60
p
(
广
告
∣
正
常
邮
件
)
=
1
48
p
(
这
∣
正
常
邮
件
)
=
1
80
p
(
正
常
)
=
2
3
(
分
子
:
所
有
邮
件
中
正
常
邮
件
的
个
数
;
分
母
:
邮
件
的
总
数
)
\begin{aligned} p(购买|正常邮件)&=\frac{1}{80}\\p(物品|正常邮件)&=\frac{1}{60}\\p(不是|正常邮件)&=\frac{1}{60}\\p(广告|正常邮件)&=\frac{1}{48}\\p(这|正常邮件)&=\frac{1}{80}\\p(正常)&=\frac{2}{3}\quad (分子:所有邮件中正常邮件的个数;分母:邮件的总数) \end{aligned}
p(购买∣正常邮件)p(物品∣正常邮件)p(不是∣正常邮件)p(广告∣正常邮件)p(这∣正常邮件)p(正常)?=801?=601?=601?=481?=801?=32?(分子:所有邮件中正常邮件的个数;分母:邮件的总数)? 垃圾邮件含有”购买“,”物品“,”不是“,”广告“,”这“词的概率为
p
(
购
买
∣
垃
圾
邮
件
)
=
7
120
p
(
物
品
∣
垃
圾
邮
件
)
=
1
30
p
(
不
是
∣
垃
圾
邮
件
)
=
1
40
p
(
广
告
∣
垃
圾
邮
件
)
=
1
30
p
(
这
∣
垃
圾
邮
件
)
=
0
p
(
正
常
)
=
2
3
(
分
子
:
所
有
邮
件
中
垃
圾
邮
件
的
个
数
;
分
母
:
邮
件
的
总
数
)
\begin{aligned} p(购买|垃圾邮件)&=\frac{7}{120}\\p(物品|垃圾邮件)&=\frac{1}{30}\\p(不是|垃圾邮件)&=\frac{1}{40}\\p(广告|垃圾邮件)&=\frac{1}{30}\\p(这|垃圾邮件)&=0\\p(正常)&=\frac{2}{3}\quad (分子:所有邮件中垃圾邮件的个数;分母:邮件的总数) \end{aligned}
p(购买∣垃圾邮件)p(物品∣垃圾邮件)p(不是∣垃圾邮件)p(广告∣垃圾邮件)p(这∣垃圾邮件)p(正常)?=1207?=301?=401?=301?=0=32?(分子:所有邮件中垃圾邮件的个数;分母:邮件的总数)? 收到了新的一份邮件E(购买物品这不是广告),属于垃圾邮件还是正常邮件?
p
(
E
∣
正
常
邮
件
)
=
p
(
购
买
,
物
品
,
这
,
不
是
,
广
告
∣
正
常
邮
件
)
?
p
(
正
常
邮
件
)
p
(
邮
件
内
容
)
=
p
(
购
买
∣
正
常
邮
件
)
?
p
(
物
品
∣
正
常
邮
件
)
?
p
(
这
∣
正
常
邮
件
)
?
p
(
不
是
∣
正
常
邮
件
)
?
p
(
广
告
∣
正
常
邮
件
)
?
p
(
正
常
邮
件
)
p
(
邮
件
内
容
)
(
在
这
里
我
们
把
联
合
概
率
转
换
成
了
条
件
概
率
,
前
提
就
是
一
开
始
我
提
到
的
“
朴
素
”
,
如
果
没
有
这
个
条
件
,
两
式
是
不
能
划
等
号
的
)
=
1
80
?
1
60
?
1
80
?
1
60
?
1
48
?
2
3
p
(
邮
件
内
容
)
p
(
E
∣
垃
圾
邮
件
)
=
p
(
购
买
,
物
品
,
这
,
不
是
,
广
告
∣
垃
圾
邮
件
)
?
p
(
垃
圾
邮
件
)
p
(
邮
件
内
容
)
=
p
(
购
买
∣
垃
圾
邮
件
)
?
p
(
物
品
∣
垃
圾
邮
件
)
?
p
(
这
∣
垃
圾
邮
件
)
?
p
(
不
是
∣
垃
圾
邮
件
)
?
p
(
广
告
∣
垃
圾
邮
件
)
?
p
(
垃
圾
邮
件
)
p
(
邮
件
内
容
)
=
7
120
?
1
30
?
0
?
1
40
?
1
30
?
1
3
p
(
邮
件
内
容
)
\begin{aligned} p(E|正常邮件) &= \frac{p(购买,物品,这,不是,广告|正常邮件)*p(正常邮件)}{p(邮件内容)}\\ &=\frac{p(购买|正常邮件)*p(物品|正常邮件)*p(这|正常邮件)*p(不是|正常邮件)*p(广告|正常邮件)*p(正常邮件)}{p(邮件内容)} {\quad(在这里我们把联合概率转换成了条件概率,前提就是一开始我提到的“朴素”,如果没有这个条件,两式是不能划等号的)}\\ &=\frac{\frac{1}{80}*\frac{1}{60}*\frac{1}{80}*\frac{1}{60}*\frac{1}{48}*\frac{2}{3}}{p(邮件内容)}\\ p(E|垃圾邮件) &= \frac{p(购买,物品,这,不是,广告|垃圾邮件)*p(垃圾邮件)}{p(邮件内容)}\\ &=\frac{p(购买|垃圾邮件)*p(物品|垃圾邮件)*p(这|垃圾邮件)*p(不是|垃圾邮件)*p(广告|垃圾邮件)*p(垃圾邮件)}{p(邮件内容)} \\ &=\frac{\frac{7}{120}*\frac{1}{30}*0*\frac{1}{40}*\frac{1}{30}*\frac{1}{3}}{p(邮件内容)} \end{aligned}
p(E∣正常邮件)p(E∣垃圾邮件)?=p(邮件内容)p(购买,物品,这,不是,广告∣正常邮件)?p(正常邮件)?=p(邮件内容)p(购买∣正常邮件)?p(物品∣正常邮件)?p(这∣正常邮件)?p(不是∣正常邮件)?p(广告∣正常邮件)?p(正常邮件)?(在这里我们把联合概率转换成了条件概率,前提就是一开始我提到的“朴素”,如果没有这个条件,两式是不能划等号的)=p(邮件内容)801??601??801??601??481??32??=p(邮件内容)p(购买,物品,这,不是,广告∣垃圾邮件)?p(垃圾邮件)?=p(邮件内容)p(购买∣垃圾邮件)?p(物品∣垃圾邮件)?p(这∣垃圾邮件)?p(不是∣垃圾邮件)?p(广告∣垃圾邮件)?p(垃圾邮件)?=p(邮件内容)1207??301??0?401??301??31??? 通过上面的计算,我们可以看到分母相同的情况下P(E|正常邮件)明显大于P(E|垃圾邮件)=0,大家认为这个结论合理嘛?明显是不合理的,原因是或许邮件包含某个垃圾邮件的关键词,但这封邮件并不一定是垃圾邮件,同理正常邮件也是如此,导致这个问题的罪魁祸首就是某个关键词的条件概率为0,如何解决这个问题呢?答案就是采用平滑
2)什么是平滑?不说废话直接上公式
p
(
w
∣
y
=
c
)
=
语
料
库
中
的
单
词
w
出
现
的
次
数
+
1
类
别
为
c
的
语
料
库
中
包
含
所
有
的
单
词
个
数
+
v
v
:
词
典
的
大
小
p(w|y=c)=\frac{语料库中的单词w出现的次数+1}{类别为c的语料库中包含所有的单词个数+v}\\v:词典的大小
p(w∣y=c)=类别为c的语料库中包含所有的单词个数+v语料库中的单词w出现的次数+1?v:词典的大小 这里分母为什么要加v(词典的大小)?
答:为了让每一个词的条件概率最终相加为1,假设有一个词库v=[a,b,c,d,…]T(T:转置),
则p(a|y=c)+p(b|y=c)+p(c|y=c)+p(d|y=c)+… = 1
3)现在有一个新的需求:
①垃圾邮件,包含8个词
(1)点击 更多 信息
(2)最新 产品
(3)信息 点击 链接
②正常邮件,包含 6个词
(1)开会
(2)信息 详见 邮件
(3)最新 信息
新邮件:S = 最新 产品 点击 链接 产品
新邮件S是垃圾邮件还是正常邮件?
建立词库v={点击,更多,信息,最新,产品,链接,开会,详见,邮件}
单词数量n=9
p
(
点
击
∣
正
常
邮
件
)
=
0
+
1
6
+
9
p
(
更
多
∣
正
常
邮
件
)
=
0
+
1
6
+
9
p
(
信
息
∣
正
常
邮
件
)
=
2
+
1
6
+
9
p
(
最
新
∣
正
常
邮
件
)
=
1
+
1
6
+
9
p
(
产
品
∣
正
常
邮
件
)
=
0
+
1
6
+
9
p
(
链
接
∣
正
常
邮
件
)
=
0
+
1
6
+
9
p
(
开
会
∣
正
常
邮
件
)
=
1
+
1
6
+
9
p
(
详
见
∣
正
常
邮
件
)
=
1
+
1
6
+
9
p
(
邮
件
∣
正
常
邮
件
)
=
1
+
1
6
+
9
p
(
正
常
邮
件
)
=
1
2
\begin{aligned} p(点击|正常邮件)&=\frac{0+1}{6+9}\\p(更多|正常邮件)&=\frac{0+1}{6+9}\\p(信息|正常邮件)&=\frac{2+1}{6+9}\\p(最新|正常邮件)&=\frac{1+1}{6+9}\\p(产品|正常邮件)&=\frac{0+1}{6+9}\\p(链接|正常邮件)&=\frac{0+1}{6+9}\\p(开会|正常邮件)&=\frac{1+1}{6+9}\\p(详见|正常邮件)&=\frac{1+1}{6+9}\\p(邮件|正常邮件)&=\frac{1+1}{6+9}\\p(正常邮件)=\frac{1}{2} \end{aligned}
p(点击∣正常邮件)p(更多∣正常邮件)p(信息∣正常邮件)p(最新∣正常邮件)p(产品∣正常邮件)p(链接∣正常邮件)p(开会∣正常邮件)p(详见∣正常邮件)p(邮件∣正常邮件)p(正常邮件)=21??=6+90+1?=6+90+1?=6+92+1?=6+91+1?=6+90+1?=6+90+1?=6+91+1?=6+91+1?=6+91+1??
p
(
点
击
∣
垃
圾
邮
件
)
=
2
+
1
8
+
9
p
(
更
多
∣
垃
圾
邮
件
)
=
1
+
1
8
+
9
p
(
信
息
∣
垃
圾
邮
件
)
=
2
+
1
8
+
9
p
(
最
新
∣
垃
圾
邮
件
)
=
1
+
1
8
+
9
p
(
产
品
∣
垃
圾
邮
件
)
=
1
+
1
8
+
9
p
(
链
接
∣
垃
圾
邮
件
)
=
1
+
1
8
+
9
p
(
开
会
∣
垃
圾
邮
件
)
=
0
+
1
8
+
9
p
(
详
见
∣
垃
圾
邮
件
)
=
0
+
1
8
+
9
p
(
邮
件
∣
垃
圾
邮
件
)
=
0
+
1
8
+
9
p
(
垃
圾
邮
件
)
=
1
2
\begin{aligned} p(点击|垃圾邮件)&=\frac{2+1}{8+9}\\p(更多|垃圾邮件)&=\frac{1+1}{8+9}\\p(信息|垃圾邮件)&=\frac{2+1}{8+9}\\p(最新|垃圾邮件)&=\frac{1+1}{8+9}\\p(产品|垃圾邮件)&=\frac{1+1}{8+9}\\p(链接|垃圾邮件)&=\frac{1+1}{8+9}\\p(开会|垃圾邮件)&=\frac{0+1}{8+9}\\p(详见|垃圾邮件)&=\frac{0+1}{8+9}\\p(邮件|垃圾邮件)&=\frac{0+1}{8+9}\\p(垃圾邮件)=\frac{1}{2} \end{aligned}
p(点击∣垃圾邮件)p(更多∣垃圾邮件)p(信息∣垃圾邮件)p(最新∣垃圾邮件)p(产品∣垃圾邮件)p(链接∣垃圾邮件)p(开会∣垃圾邮件)p(详见∣垃圾邮件)p(邮件∣垃圾邮件)p(垃圾邮件)=21??=8+92+1?=8+91+1?=8+92+1?=8+91+1?=8+91+1?=8+91+1?=8+90+1?=8+90+1?=8+90+1??
在上述计算词库中每个词的条件概率,使用加1平滑后,分母加词库的大小n=9,使P(v|正常邮件)=1;P(v|垃圾邮件)=1,可以加加看!
p
(
S
∣
正
常
邮
件
)
=
p
(
最
新
,
产
品
,
点
击
,
链
接
,
产
品
∣
正
常
邮
件
)
?
p
(
正
常
邮
件
)
p
(
邮
件
内
容
)
=
p
(
最
新
∣
正
常
邮
件
)
?
p
(
产
品
∣
正
常
邮
件
)
?
p
(
点
击
∣
正
常
邮
件
)
?
p
(
链
接
∣
正
常
邮
件
)
?
p
(
产
品
∣
正
常
邮
件
)
?
p
(
正
常
邮
件
)
p
(
邮
件
内
容
)
=
2
15
?
1
15
?
1
15
?
1
15
?
1
15
?
1
2
p
(
邮
件
内
容
)
p
(
S
∣
垃
圾
邮
件
)
=
p
(
最
新
,
产
品
,
点
击
,
链
接
,
产
品
∣
垃
圾
邮
件
)
?
p
(
正
常
邮
件
)
p
(
邮
件
内
容
)
=
p
(
最
新
∣
垃
圾
邮
件
)
?
p
(
产
品
∣
垃
圾
邮
件
)
?
p
(
点
击
∣
垃
圾
邮
件
)
?
p
(
链
接
∣
垃
圾
邮
件
)
?
p
(
产
品
∣
垃
圾
邮
件
)
?
p
(
垃
圾
邮
件
)
p
(
邮
件
内
容
)
=
2
17
?
2
17
?
3
17
?
2
17
?
2
17
?
1
2
p
(
邮
件
内
容
)
\begin{aligned} p(S|正常邮件)&=\frac{p(最新,产品,点击,链接,产品|正常邮件)*p(正常邮件)}{p(邮件内容)}\\ &=\frac{p(最新|正常邮件)*p(产品|正常邮件)*p(点击|正常邮件)*p(链接|正常邮件)*p(产品|正常邮件)*p(正常邮件)}{p(邮件内容)}\\ &=\frac{\frac{2}{15}*\frac{1}{15}*\frac{1}{15}*\frac{1}{15}*\frac{1}{15}*\frac{1}{2}}{p(邮件内容)}\\ p(S|垃圾邮件)&=\frac{p(最新,产品,点击,链接,产品|垃圾邮件)*p(正常邮件)}{p(邮件内容)}\\ &=\frac{p(最新|垃圾邮件)*p(产品|垃圾邮件)*p(点击|垃圾邮件)*p(链接|垃圾邮件)*p(产品|垃圾邮件)*p(垃圾邮件)}{p(邮件内容)}\\ &=\frac{\frac{2}{17}*\frac{2}{17}*\frac{3}{17}*\frac{2}{17}*\frac{2}{17}*\frac{1}{2}}{p(邮件内容)} \end{aligned}
p(S∣正常邮件)p(S∣垃圾邮件)?=p(邮件内容)p(最新,产品,点击,链接,产品∣正常邮件)?p(正常邮件)?=p(邮件内容)p(最新∣正常邮件)?p(产品∣正常邮件)?p(点击∣正常邮件)?p(链接∣正常邮件)?p(产品∣正常邮件)?p(正常邮件)?=p(邮件内容)152??151??151??151??151??21??=p(邮件内容)p(最新,产品,点击,链接,产品∣垃圾邮件)?p(正常邮件)?=p(邮件内容)p(最新∣垃圾邮件)?p(产品∣垃圾邮件)?p(点击∣垃圾邮件)?p(链接∣垃圾邮件)?p(产品∣垃圾邮件)?p(垃圾邮件)?=p(邮件内容)172??172??173??172??172??21??? 最后我们得出:
因为p(S|正常邮件)<p(S|垃圾邮件),所以S为垃圾邮件的可能性会更大
**Tips:我们可以看到上述计算出的条件概率非常小,在计算机中容易出现”溢出的现象“,为了避免该问题我们加入log,这样log(p1 p2 p3) = logp1+logp2+log3,我就不在这里过多的赘述了!
4、朴素贝叶斯的最大似然估计
4.1、预备知识
1)最大似然估计:
最大似然的核心:假设未知参数为θ,已知的样本为D,最大似然估计通过最大化P(D|θ)来求解未知参数θ
最大似然估计的详细解释我在逻辑回归一文中做了详细阐述,就不过多赘述
2)带限制条件的优化
①无约束条件的优化:
例
1.
求
f
(
x
)
=
x
2
?
2
x
?
3
的
最
小
值
解
:
f
′
(
x
)
=
2
x
?
2
令
f
′
(
x
)
=
0
得
x
=
1
\begin{aligned} 例1.求f(x) = x^2 - 2x - 3的最小值\\ 解:f^{'}(x) = 2x - 2 \\ 令f^{'}(x)=0\\得x=1 \end{aligned}
例1.求f(x)=x2?2x?3的最小值解:f′(x)=2x?2令f′(x)=0得x=1? ②带约束条件的优化-拉格朗日惩罚项
求
f
(
x
,
y
)
=
x
+
y
的
最
大
值
,
但
有
个
条
件
是
x
2
+
y
2
=
1
解
:
由
x
2
+
y
2
=
1
得
x
2
+
y
2
?
1
=
0
设
f
(
x
,
y
,
λ
)
=
x
+
y
+
λ
(
x
2
+
y
2
?
1
)
{
f
x
′
(
x
,
y
,
λ
)
=
1
+
2
λ
x
=
0
f
y
′
(
x
,
y
,
λ
)
=
1
+
2
λ
y
=
0
f
λ
′
(
x
,
y
,
λ
)
=
x
2
+
y
2
?
1
=
0
得
:
{
λ
1
=
2
2
x
1
=
?
2
2
y
1
=
?
2
2
{
λ
2
=
?
2
2
x
2
=
2
2
y
2
=
2
2
综
上
:
得
令
f
(
x
,
y
)
=
x
+
y
最
大
的
值
为
{
λ
2
=
?
2
2
x
2
=
2
2
y
2
=
2
2
求f(x,y)=x+y的最大值,但有个条件是x^{2}+y^2 = 1\\解:由x^2+y^2 = 1 \\得x^2+y^2 - 1 =0 \\ 设f(x,y,\lambda) = x + y + \lambda{(x^2+y^2 - 1)}\\ \begin{cases} f^{'}_x(x,y,\lambda) = 1+2\lambda{x}=0 \\ f^{'}_y(x,y,\lambda) = 1+2\lambda{y}=0 \\ f^{'}_{\lambda}(x,y,\lambda) = x^2+y^2-1=0 \end{cases}\\ 得: \begin{cases} \lambda_{1} = \frac{\sqrt{2}}{2} \\ x_1 = -\frac{\sqrt{2}}{2} \\ y_1 = -\frac{\sqrt{2}}{2}\\ \end{cases}\quad \begin{cases} \lambda_{2} = -\frac{\sqrt{2}}{2} \\ x_2 = \frac{\sqrt{2}}{2} \\ y_2 = \frac{\sqrt{2}}{2}\\ \end{cases}\\ 综上:得令f(x,y)=x+y最大的值为\\ \begin{cases} \lambda_{2} = -\frac{\sqrt{2}}{2} \\ x_2 = \frac{\sqrt{2}}{2} \\ y_2 = \frac{\sqrt{2}}{2}\\ \end{cases}
求f(x,y)=x+y的最大值,但有个条件是x2+y2=1解:由x2+y2=1得x2+y2?1=0设f(x,y,λ)=x+y+λ(x2+y2?1)??????fx′?(x,y,λ)=1+2λx=0fy′?(x,y,λ)=1+2λy=0fλ′?(x,y,λ)=x2+y2?1=0?得:??????λ1?=22
??x1?=?22
??y1?=?22
?????????λ2?=?22
??x2?=22
??y2?=22
???综上:得令f(x,y)=x+y最大的值为??????λ2?=?22
??x2?=22
??y2?=22
???
4.2、得到朴素贝叶斯的目标函数
4.3、对目标函数的求解
|