一、朴素贝叶斯
贝叶斯定理的概述
- 朴素贝叶斯算法是统计学的一种分类方法,它利用概率统计知识进行分类。朴素贝叶斯以贝叶斯定理为基础,故称为贝叶斯分类,之所以有"朴素"两字,是因为该算法假设特征之间相互独立,而这个假设看上去又有点过头(因为绝大多数实际问题中不太可能存在完全的独立性),因此加上了朴素。朴素贝叶斯是多用途分类器,能在很多不同的情景下找到它的应用,例如垃圾邮件过滤、自然语言处理等.
1. 概率
1)定义
概率是反映随机事件出现的可能性大小. 随机事件是指在相同条件下,可能出现也可能不出现的事件. 例如:
(1)抛一枚硬币,可能正面朝上,可能反面朝上,这是随机事件. 正/反面朝上的可能性称为概率;
(2)掷骰子,掷出的点数为随机事件. 每个点数出现的可能性称为概率;
(3)一批商品包含良品、次品,随机抽取一件,抽得良品/次品为随机事件. 经过大量反复试验,抽得次品率越来越接近于某个常数,则该常数为概率.
我们可以将随机事件记为A或B,则P(A), P(B)表示事件A或B的概率.
联合概率与条件概率
① 联合概率
指包含多个条件且所有条件同时成立的概率,记作 P ( A , B ) P ( A , B ) P(A,B) ,或 P ( A B ) P(AB) P(AB),或 P ( A ⋂ B ) P(A \bigcap B) P(A⋂B)
② 条件概率
已知事件B发生的条件下,另一个事件A发生的概率称为条件概率,记为: P ( A ∣ B ) P(A|B) P(A∣B)
③ 事件的独立性
事件A不影响事件B的发生,称这两个事件独立,记为:
P
(
A
B
)
=
P
(
A
)
P
(
B
)
P(AB)=P(A)P(B)
P(AB)=P(A)P(B)
因为A和B不相互影响,则有:
P
(
A
∣
B
)
=
P
(
A
)
P(A|B) = P(A)
P(A∣B)=P(A)
可以理解为,给定或不给定B的条件下,A的概率都一样大
先验概率与后验概率
① 先验概率
先验概率也是根据以往经验和分析得到的概率,例如:在没有任何信息前提的情况下,猜测对面来的陌生人姓氏,姓李的概率最大(因为全国李姓为占比最高的姓氏),这便是先验概率.
P
(
A
)
P(A)
P(A)是A的先验概率,之所以是“先验”,是因为它不考虑任何B方面的因素
P
(
B
)
P(B)
P(B)是A的先验概率,之所以是“先验”,是因为它不考虑任何A方面的因素
② 后验概率
后验概率是指在接收了一定条件或信息的情况下的修正概率,例如:在知道对面的人来自“牛家村”的情况下,猜测他姓牛的概率最大,但不排除姓杨、李等等,这便是后验概率.
P
(
A
∣
B
)
P(A|B)
P(A∣B)是已知B发生后A的发生的概率,也由于B的取值而被称作A的后验概率
P
(
B
∣
A
)
P(B|A)
P(B∣A)是已知A发生后B的发生的概率,也由于A的取值而被称作B的后验概率
③ 两者的关系
事情还没有发生,求这件事情发生的可能性的大小,是先验概率(可以理解为由因求果). 事情已经发生,求这件事情发生的原因是由某个因素引起的可能性的大小,是后验概率(由果求因). 先验概率与后验概率有不可分割的联系,后验概率的计算要以先验概率为基础.
- 事件A在事件B发生的条件下的概率,与事件B在事件A发生的条件下的概率是不一样的;这两者之间存在一定的关系,贝叶斯就是对于这种关系的描述。
2. 贝叶斯定理
1)定义
贝叶斯定理由英国数学家托马斯.贝叶斯 ( Thomas Bayes)提出,用来描述两个条件概率之间的关系,定理描述为:
P
(
A
∣
B
)
=
P
(
A
)
P
(
B
∣
A
)
P
(
B
)
P(A|B) = \frac{P(A)P(B|A)}{P(B)}
P(A∣B)=P(B)P(A)P(B∣A)
其中,
P
(
A
)
P(A)
P(A)和
P
(
B
)
P(B)
P(B)是A事件和B事件发生的概率.
P
(
A
∣
B
)
P(A|B)
P(A∣B)称为条件概率,表示B事件发生条件下,A事件发生的概率. 推导过程:
P
(
A
,
B
)
=
P
(
B
)
P
(
A
∣
B
)
P
(
B
,
A
)
=
P
(
A
)
P
(
B
∣
A
)
P(A,B) =P(B)P(A|B)\\ P(B,A) =P(A)P(B|A)
P(A,B)=P(B)P(A∣B)P(B,A)=P(A)P(B∣A)
其中
P
(
A
,
B
)
P(A,B)
P(A,B)称为联合概率,指事件B发生的概率,乘以事件A在事件B发生的条件下发生的概率. 因为
P
(
A
,
B
)
=
P
(
B
,
A
)
P(A,B)=P(B,A)
P(A,B)=P(B,A), 所以有:
P
(
B
)
P
(
A
∣
B
)
=
P
(
A
)
P
(
B
∣
A
)
P(B)P(A|B)=P(A)P(B|A)
P(B)P(A∣B)=P(A)P(B∣A)
两边同时除以P(B),则得到贝叶斯定理的表达式. 其中,
P
(
A
)
P(A)
P(A)是先验概率,
P
(
A
∣
B
)
P(A|B)
P(A∣B)是已知B发生后A的条件概率,也被称作后验概率.
【示例一】计算诈骗短信的概率
事件 | 概率 | 表达式 |
---|---|---|
所有短信中,诈骗短信 | 5% | P(A)= 0.05 |
所有短信中,含有“中奖”两个字 | 4% | P(B)= 0.04 |
所有短信中,是诈骗短信,并且含有“中奖”两个字 | 50% | P(B|A) = 0.5 |
求:收到一条新信息,含有“中奖”两个字,是诈骗短信的概率?
P ( A ∣ B ) = P ( A ) P ( B ∣ A ) / P ( B ) = 0.05 ∗ 0.5 / 0.04 = 0.625 P(A|B) = P(A) P(B|A) / P(B) = 0.05 * 0.5 / 0.04 = 0.625 P(A∣B)=P(A)P(B∣A)/P(B)=0.05∗0.5/0.04=0.625
3. 朴素贝叶斯分类器
1)分类原理
朴素贝叶斯分类器就是根据贝叶斯公式计算结果进行分类的模型,“朴素”指事件之间相互独立无影响. 例如:有如下数据集:
Text | Category |
---|---|
A great game(一个伟大的比赛) | Sports(体育运动) |
The election was over(选举结束) | Not sports(不是体育运动) |
Very clean match(没内幕的比赛) | Sports(体育运动) |
A clean but forgettable game(一场难以忘记的比赛) | Sports(体育运动) |
It was a close election(这是一场势均力敌的选举) | Not sports(不是体育运动) |
求:“A very close game” 是体育运动的概率?数学上表示为 P(Sports | a very close game). 根据贝叶斯定理,是运动的概率可以表示为:
P
(
S
p
o
r
t
s
∣
a
v
e
r
y
c
l
o
s
e
g
a
m
e
)
=
P
(
a
v
e
r
y
c
l
o
s
e
g
a
m
e
∣
s
p
o
r
t
s
)
∗
P
(
s
p
o
r
t
s
)
P
(
a
v
e
r
y
c
l
o
s
e
g
a
m
e
)
P(Sports | a \ very \ close \ game) = \frac{P(a \ very \ close \ game | sports) * P(sports)}{P(a \ very \ close \ game)}
P(Sports∣a very close game)=P(a very close game)P(a very close game∣sports)∗P(sports)
不是运动概率可以表示为:
P
(
N
o
t
S
p
o
r
t
s
∣
a
v
e
r
y
c
l
o
s
e
g
a
m
e
)
=
P
(
a
v
e
r
y
c
l
o
s
e
g
a
m
e
∣
N
o
t
s
p
o
r
t
s
)
∗
P
(
N
o
t
s
p
o
r
t
s
)
P
(
a
v
e
r
y
c
l
o
s
e
g
a
m
e
)
P(Not \ Sports | a \ very \ close \ game) = \frac{P(a \ very \ close \ game | Not \ sports) * P(Not \ sports)}{P(a \ very \ close \ game)}
P(Not Sports∣a very close game)=P(a very close game)P(a very close game∣Not sports)∗P(Not sports)
概率更大者即为分类结果. 由于分母相同,即比较分子谁更大即可. 我们只需统计”A very close game“ 多少次出现在Sports类别中,就可以计算出上述两个概率. 但是”A very close game“ 并没有出现在数据集中,所以这个概率为0,要解决这个问题,就假设每个句子的单词出现都与其它单词无关(事件独立即朴素的含义),所以,P(a very close game)可以写成:
P
(
a
v
e
r
y
c
l
o
s
e
g
a
m
e
)
=
P
(
a
)
∗
P
(
v
e
r
y
)
∗
P
(
c
l
o
s
e
)
∗
P
(
g
a
m
e
)
P(a \ very \ close \ game) = P(a) * P(very) * P(close) * P(game)
P(a very close game)=P(a)∗P(very)∗P(close)∗P(game)
P ( a v e r y c l o s e g a m e ∣ S p o r t s ) = P ( a ∣ S p o r t s ) ∗ P ( v e r y ∣ S p o r t s ) ∗ P ( c l o s e ∣ S p o r t s ) ∗ P ( g a m e ∣ S p o r t s ) P(a \ very \ close \ game|Sports)= \\ P(a|Sports)*P(very|Sports)*P(close|Sports)*P(game|Sports) P(a very close game∣Sports)=P(a∣Sports)∗P(very∣Sports)∗P(close∣Sports)∗P(game∣Sports)
统计出“a", “very”, “close”, "game"出现在"Sports"类别中的概率,就能算出其所属的类别. 具体计算过程如下:
-
第一步:计算总词频:Sports类别词语总数11,Not Sports类别词语总数9,词语总数14
-
第二步:计算每个类别的先验概率
# Sports和Not Sports概率
P(Sports) = 3 / 5 = 0.6
P(Not Sports) = 2 / 5 = 0.4
# Sports条件下各个词语概率,分子都加1
P(a | Sports) = (2 + 1) / (11 + 14) = 0.12#这里面2+1,这里面的加1是为了避免分子为0的情况,条件为0的值将导致该类别的后验概率直接为0,从而否定了其他特征对样本分类概率的估计,使得分类结果产生偏差。
#为了解决零概率的问题,法国数学家皮埃尔.西蒙斯.拉普拉斯最早提出用加1的方法估计没有出现过现象的概率,这就是拉普拉斯修正。
P(very | Sports) = (1 + 1) / (11 + 14) = 0.08
P(close | Sports) = (0 + 1) / (11 + 14) = 0.04
P(game | Sports) = (2 + 1) / (11 + 14) = 0.12
# Not Sports条件下各个词语概率
P(a | Not Sports) = (1 + 1) / (9 + 14) = 0.087
P(very | Not Sports) = (0 + 1) / (9 + 14) = 0.043
P(close | Not Sports) = (1 + 1) / (9 + 14) = = 0.087
P(game | Not Sports) = (0 + 1) / (9 + 14) = 0.043
-
-第三步:将先验概率带入贝叶斯定理,计算概率:
是体育运动的概率:
P ( a v e r y c l o s e g a m e ∣ S p o r t s ) ∗ P ( S p o r t ) = P ( a ∣ S p o r t s ) ∗ P ( v e r y ∣ S p o r t s ) ∗ P ( c l o s e ∣ S p o r t s ) ∗ P ( g a m e ∣ S p o r t s ) = 0.12 ∗ 0.08 ∗ 0.04 ∗ 0.12 ∗ 0.6 = 0.000027648 P(a \ very \ close \ game|Sports) * P(Sport)= \\ P(a|Sports)*P(very|Sports)*P(close|Sports)*P(game|Sports)= \\ 0.12 * 0.08 * 0.04 * 0.12 * 0.6 = 0.000027648 P(a very close game∣Sports)∗P(Sport)=P(a∣Sports)∗P(very∣Sports)∗P(close∣Sports)∗P(game∣Sports)=0.12∗0.08∗0.04∗0.12∗0.6=0.000027648
不是体育运动的概率:
P
(
a
v
e
r
y
c
l
o
s
e
g
a
m
e
∣
N
o
t
S
p
o
r
t
s
)
∗
P
(
N
o
t
S
p
o
r
t
)
=
P
(
a
∣
N
o
t
S
p
o
r
t
s
)
∗
P
(
v
e
r
y
∣
N
o
t
S
p
o
r
t
s
)
∗
P
(
c
l
o
s
e
∣
N
o
t
S
p
o
r
t
s
)
∗
P
(
g
a
m
e
∣
N
o
t
S
p
o
r
t
s
)
=
0.087
∗
0.043
∗
0.087
∗
0.043
∗
0.4
=
0.0000055984
P(a \ very \ close \ game|Not \ Sports) * P(Not Sport)= \\ P(a|Not \ Sports)*P(very|Not \ Sports)*P(close|Not \ Sports)*P(game|Not \ Sports)= \\ 0.087 * 0.043 * 0.087 * 0.043 * 0.4 = 0.0000055984
P(a very close game∣Not Sports)∗P(NotSport)=P(a∣Not Sports)∗P(very∣Not Sports)∗P(close∣Not Sports)∗P(game∣Not Sports)=0.087∗0.043∗0.087∗0.043∗0.4=0.0000055984
分类结果:P(Sports) = 0.000027648 , P(Not Sports) = 0.0000055984, 是体育运动.
实现朴素贝叶斯分类器
在sklearn中,提供了三个朴素贝叶斯分类器,分别是:
- GaussianNB(高斯朴素贝叶斯分类器):适合用于样本的值是连续的,数据呈正态分布的情况(比如人的身高、城市家庭收入、一次考试的成绩等等)
- MultinominalNB(多项式朴素贝叶斯分类器):适合用于大部分属性为离散值的数据集
- BernoulliNB(伯努利朴素贝叶斯分类器):适合用于特征值为二元离散值或是稀疏的多元离散值的数据集
- 稀疏的多元离散值:有很多概率为0,没有值的,有值概率不为0的很少
优点:
- 分类效果稳健,适合大规模数据集
- 能够很方便处理多分类的任务
- 对缺失数据和噪声数据不敏感
缺点:
- 特征之间相互独立的假设在实际应用中往往是不成立的,在特征个数比较多或者特征之间相关性较大时,分类效果一般
- 需要知道先验概率,且先验概率很多时候取决去假设,假设的模型可以有很多种,因此在某些时候由于假设的先验模型的原因导致预测效果不佳