贝叶斯定理
说起贝叶斯定理,大家一定能想到条件概率。条件概率就是在某一些条件确定的情况下概率会发生改变。下面我们来举一个简单的例子来复习条件概率。
小明问他的妈妈明天下雨的概率是多少,他妈妈查了过去十天的天气情况,发现一共有八天晴天,两天下雨,于是他妈妈就像告诉小明说明天下雨的概率为0.2。小明的妈妈刚刚想告诉小明这个结论,没想到小明抢先一步说:“我刚刚看了天空,天空中有星星”。emmmm,故事讲到这里不难发现星星一定是一个重要条件。小明的妈妈为了结论的准确性,于是又查个更详细的天气情况,她发现,在过去的十天中,有星星的天数为四天,其中第二天为晴天情况下当天晚上有星星的天数为三天,相对应的雨天中有前一天有星星的天数为一天,具体情况如下所示
天数 | 是否有星星 | 是否晴天 |
---|---|---|
1 | 有 | 是 |
2 | 有 | 是 |
3 | 有 | 是 |
4 | 无 | 是 |
5 | 无 | 是 |
6 | 无 | 是 |
7 | 无 | 是 |
8 | 无 | 是 |
9 | 有 | 否 |
10 | 无 | 否 |
我们可以计算 P ( 晴 天 ∣ 有 星 星 ) = 0.75 P(晴天|有星星)=0.75 P(晴天∣有星星)=0.75,所以有,我们估计第二天是晴天的概率表就由原来的0.8变成了现在的0.75。原因就是我们得知今天晚上有星星,并且统计了有星星情况下第二天是晴天的情况。
贝叶斯公式
P
(
C
∣
X
)
=
P
(
X
,
C
)
P
(
X
)
P(C | X)=\frac {P(X, C)} {P(X)}
P(C∣X)=P(X)P(X,C)
在朴素贝叶斯分类其中,C表示分类的结果,X表示某一个属性的取值情况。
由贝叶斯公式得
P
(
X
,
C
)
=
P
(
X
∣
C
)
P
(
C
)
P(X, C)=P(X | C)P(C)
P(X,C)=P(X∣C)P(C),带入上式得到
P
(
C
∣
X
)
=
P
(
X
∣
C
)
P
(
C
)
P
(
X
)
=
P
(
C
)
P
(
X
)
∏
i
=
1
d
P
(
x
i
∣
c
)
P(C | X)=\frac {P(X | C)P(C)} {P(X)}=\frac {P(C)} {P(X)}\prod_{i=1}^d P(x_i | c)
P(C∣X)=P(X)P(X∣C)P(C)=P(X)P(C)i=1∏dP(xi∣c)
其中
d
d
d为属性数目,
x
i
x_i
xi为
x
x
x在
i
i
i个属性上的取值,并且对于所有类别来说,
P
(
X
)
P(X)
P(X)取值都是相同的,所以贝叶斯分类器的判定准则为
h
n
b
(
x
)
=
a
r
g
m
a
x
P
(
C
)
∏
i
=
1
d
P
(
x
i
∣
c
)
{h_{nb}}(x)=arg maxP(C)\prod_{i=1}^d P(x_i | c)
hnb(x)=argmaxP(C)i=1∏dP(xi∣c)
所以关键就是要求出
P
(
C
)
P(C)
P(C)和
P
(
x
i
∣
c
)
P(x_i | c)
P(xi∣c)的值。其中
P
(
C
)
P(C)
P(C)相对来说比较容易求,对于
P
(
x
i
∣
c
)
P(x_i | c)
P(xi∣c)的求法分为两种情况:
- 对于离散的属性值: P ( x i ∣ c ) = ∣ D c , x i ∣ D c P(x_i | c)=\frac {\left | {D_{c, x_i}} \right |} {D_c} P(xi∣c)=Dc∣Dc,xi∣
- 对于连续的属性值,我们一般采用正态分布作为其概率密度函数,有
P ( x i ∣ c ) = 1 2 π σ c . i e x p ( − ( x i − μ c , i ) 2 2 σ c , i 2 ) P(x_i | c)=\frac {1} {\sqrt {2π}{\sigma_{c.i}}}exp(-\frac {{(x_i-{\mu_{c,i}})}^{2}} {2{\sigma_{c,i}^{2}}}) P(xi∣c)=2πσc.i1exp(−2σc,i2(xi−μc,i)2)
其中的均值和方差就是根据我们提供的训练数据计算出来的。
μ = 1 N ∑ i = 1 N x i \mu=\frac {1} {N}\begin{matrix} \sum_{i=1}^N x_i \end{matrix} μ=N1∑i=1Nxi
σ = 1 N ( x i − μ ) 2 \sigma=\sqrt {\frac {1} {N}{(x_i-\mu)}^2} σ=N1(xi−μ)2
为什么朴素
这个朴素,在英文里面其实是naive,也就是天真的意思。为什么要叫朴素贝叶斯呢,因为我们在计算概率的时候有一个假设条件就是每个属性对于最后分类结果的影响都是独立的,但是一般现实世界中各个属性之间都是不相互独立的,但是为了计算,我们就牺牲了一点精确性。即使我们忽略了独立性的条件,在很多问题上,朴素贝叶斯确实能取得不错的效果,这就够啦。
举个栗子
我们给出一组商品的数据,然后根据朴素贝叶斯分类器来判断我们给定的一个商品是否值得购买。
编号 | 质量 | 价格 | 售后 | 好评率 | 是否值得购买 |
---|---|---|---|---|---|
1 | 好 | 高 | 差 | 0.502 | 否 |
2 | 好 | 中 | 好 | 0.713 | 是 |
3 | 中 | 低 | 差 | 0.421 | 否 |
4 | 差 | 低 | 差 | 0.901 | 是 |
5 | 差 | 中 | 好 | 0.651 | 是 |
6 | 好 | 高 | 好 | 0.901 | 是 |
7 | 中 | 高 | 好 | 0.541 | 否 |
8 | 中 | 高 | 好 | 0.845 | 是 |
9 | 好 | 中 | 差 | 0.352 | 否 |
10 | 差 | 低 | 差 | 0.201 | 否 |
测试数据
编号 | 质量 | 价格 | 售后 | 好评率 | 是否值得购买 |
---|---|---|---|---|---|
测试 | 中 | 中 | 差 | 0.432 | ? |
下面我们开始计算
P
(
是
否
值
得
购
买
=
是
)
=
0.5
P(是否值得购买=是)=0.5
P(是否值得购买=是)=0.5
P
(
是
否
值
得
购
买
=
否
)
=
0.5
P(是否值得购买=否)=0.5
P(是否值得购买=否)=0.5
P
(
质
量
=
中
∣
值
得
购
买
)
=
0.2
P(质量=中|值得购买)=0.2
P(质量=中∣值得购买)=0.2
P
(
质
量
=
中
∣
不
值
得
购
买
)
=
0.4
P(质量=中|不值得购买)=0.4
P(质量=中∣不值得购买)=0.4
P
(
价
格
=
中
∣
值
得
购
买
)
=
0.4
P(价格=中|值得购买)=0.4
P(价格=中∣值得购买)=0.4
P
(
价
格
=
中
∣
不
值
得
购
买
)
=
0.2
P(价格=中|不值得购买)=0.2
P(价格=中∣不值得购买)=0.2
根据上面给的均值和方差公式我们可以计算得到
μ
值
得
买
=
0.8022
{\mu_{值得买}}=0.8022
μ值得买=0.8022
σ
值
得
买
≈
0.1021
{\sigma_{值得买}}\approx0.1021
σ值得买≈0.1021
σ
值
得
买
2
≈
0.0104
{\sigma^2_{值得买}}\approx0.0104
σ值得买2≈0.0104
μ
不
值
得
买
=
0.4034
{\mu_{不值得买}}=0.4034
μ不值得买=0.4034
σ
值
得
买
≈
0.1204
{\sigma_{值得买}}\approx0.1204
σ值得买≈0.1204
σ
值
得
买
2
≈
0.0145
{\sigma^2_{值得买}}\approx0.0145
σ值得买2≈0.0145
P
(
好
评
率
=
0.432
∣
是
)
=
1
2
π
σ
值
得
买
e
x
p
(
−
(
0.432
−
μ
值
得
买
)
2
2
σ
值
得
买
2
)
≈
0.006
P(好评率=0.432|是)=\frac {1} {\sqrt{2π} {\sigma_{值得买}}}exp(-\frac {{(0.432-\mu_{值得买})}^2} {2{\sigma^2_{值得买}}})\approx0.006
P(好评率=0.432∣是)=2πσ值得买1exp(−2σ值得买2(0.432−μ值得买)2)≈0.006
P
(
好
评
率
=
0.432
∣
否
)
=
1
2
π
σ
不
值
得
买
e
x
p
(
−
(
0.432
−
μ
不
值
得
买
)
2
2
σ
不
值
得
买
2
)
≈
3.633
P(好评率=0.432|否)=\frac {1} {\sqrt{2π} {\sigma_{不值得买}}}exp(-\frac {{(0.432-\mu_{不值得买})}^2} {2{\sigma^2_{不值得买}}})\approx3.633
P(好评率=0.432∣否)=2πσ不值得买1exp(−2σ不值得买2(0.432−μ不值得买)2)≈3.633
有了上面的数据我们就可以最后计算贝叶斯分类器的得分了
P
(
值
得
买
∣
X
)
=
P
(
值
得
买
)
P
(
质
量
=
中
∣
值
得
购
买
)
P
(
价
格
=
中
∣
值
得
购
买
)
P
(
好
评
率
=
0.432
∣
是
)
≈
0.00024
P(值得买|X)=P(值得买)P(质量=中|值得购买)P(价格=中|值得购买)P(好评率=0.432|是)\approx0.00024
P(值得买∣X)=P(值得买)P(质量=中∣值得购买)P(价格=中∣值得购买)P(好评率=0.432∣是)≈0.00024
P
(
不
值
得
买
∣
X
)
=
P
(
不
值
得
买
)
P
(
质
量
=
中
∣
不
值
得
购
买
)
P
(
价
格
=
中
∣
不
值
得
购
买
)
P
(
好
评
率
=
0.432
∣
否
)
≈
0.14532
P(不值得买|X)=P(不值得买)P(质量=中|不值得购买)P(价格=中|不值得购买)P(好评率=0.432|否)\approx0.14532
P(不值得买∣X)=P(不值得买)P(质量=中∣不值得购买)P(价格=中∣不值得购买)P(好评率=0.432∣否)≈0.14532
由于
0.14532
>
0.00024
0.14532>0.00024
0.14532>0.00024,所以我们用朴素贝叶斯分类器得到的结果是不值得购买。
拉普拉斯平滑
由于我们最后计算结果的时候是使用概率连乘,我们都知道,乘法最怕遇到0了,因为不管谁乘以0都是0,假设我们有一个属性在某一种分类结果中都没有出现,那么最后分类器就会失效了,为了解决这个问题,我们将计算概率的公式进行修正
P
~
(
C
)
=
∣
D
c
∣
+
1
∣
D
∣
+
N
\tilde {P}(C)=\frac {\left | D_c \right |+1} {\left | D \right | + N}
P~(C)=∣D∣+N∣Dc∣+1
P
~
(
x
i
∣
C
)
=
∣
D
c
,
x
i
∣
+
1
∣
D
c
∣
+
N
i
\tilde {P}(x_i | C)=\frac {\left | D_{c, x_i} \right |+1} {\left | D_c \right | + N_i}
P~(xi∣C)=∣Dc∣+Ni∣Dc,xi∣+1
其中
N
N
N表示训练集中可分类的类别数,
N
i
N_i
Ni表示第
i
i
i个属性可能的取值数。这样我们就不怕遇到概率为0的情况啦,是不是很厉害呢,哈哈哈。
总结
数学真神奇。