朴素贝叶斯是一组功能强大且易于训练的分类器,它使用贝叶斯定理来确定给定一组条件的结果的概率,“朴素”的含义是指所给定的条件都能独立存在和发生. 朴素贝叶斯是多用途分类器,能在很多不同的情景下找到它的应用,例如垃圾邮件过滤、自然语言处理等.
贝叶斯定理
贝叶斯定理由英国数学家托马斯.贝叶斯 ( 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的条件概率,也被称作后验概率.
朴素贝叶斯分类器
朴素贝叶斯分类器就是根据贝叶斯公式计算结果进行分类的模型,“朴素”指事件之间相互独立无影响. 例如:有如下数据集:
求:”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"类别中的概率,就能算出其所属的类别.
在sklearn中,提供了三个朴素贝叶斯分类器,分别是:
- GaussianNB(高斯朴素贝叶斯分类器):适合用于样本的值是连续的,数据呈正态分布的情况(比如人的身高、城市家庭收入、一次考试的成绩等等)
- MultinominalNB(多项式朴素贝叶斯分类器):适合用于大部分属性为离散值的数据集
- BernoulliNB(伯努利朴素贝叶斯分类器):适合用于特征值为二元离散值或是稀疏的多元离散值的数据集