朴素贝叶斯分类
从下面问题来认识一下朴素贝叶斯分类。
问题背景:
假设你是一家电脑店的老板,陆续有人从你这里买到电脑,但也有人不会选择你这家店。如果此时你店里来了几个顾客,如果能事先知道哪些人会购买你的电脑,这无疑对你是一个很大的帮助。
分析:
假设你随机选取了50个来过你店里的顾客,其中有买电脑的和没有买的,你之前都观察了解了这50个顾客的相关特征,比如有年龄、收入状况和是否爱打游戏。这样你就得到了类似以下数据(部分):
顾客编号 | 年龄 | 收入状况 | 是否爱打游戏 | 是否购买电脑 |
---|---|---|---|---|
1 | 大 | 高 | 是 | 是 |
2 | 中 | 低 | 否 | 否 |
3 | 中 | 高 | 是 | 否 |
4 | 中 | 低 | 否 | 是 |
5 | 大 | 中 | 是 | 是 |
… | … | … | … | … |
通过这张表格就可以分析买电脑的顾客的特征,可以得出买电脑的顾客对应特征具体概率,如在以上5个样本中,购买电脑的顾客收入状况高的概率是1/3,年龄大的概率是2/3,这个称之为条件概率;还可以得到顾客买电脑的为3/5,这个称之为先验概率。当来了一个新顾客时,假设他的特征分别是中、高、是,那么根据我们已有的顾客数据是否可以得出这个新顾客买电脑的概率(也就是我们要求的后验概率)呢?
这里就要用到贝叶斯公式,具体公式如下:
P
(
A
∣
B
)
=
P
(
A
,
B
)
P
(
B
)
=
P
(
B
∣
A
)
P
(
A
)
P
(
B
)
P(A|B)=\frac{P(A,B)}{P(B)}=\frac{P(B|A)P(A)}{P(B)}
P(A∣B)=P(B)P(A,B)=P(B)P(B∣A)P(A)
语言解释就是事件B发生的条件下事件A发生的概率是事件A发生的条件下事件B发生的概率乘上事件A发生的概率除以事件B发生的概率。将右边式子分母乘到左边,就会发现左右两边就是事件A,B同时发生的概率。
将以上公式运用于分类上就是:
P
(
c
∣
x
)
=
P
(
x
∣
c
)
P
(
c
)
P
(
x
)
P(c|x)=\frac{P(x|c)P(c)}{P(x)}
P(c∣x)=P(x)P(x∣c)P(c)
其中
P
(
x
∣
c
)
P(x|c)
P(x∣c)表示第c类样本组成的集合中样本x发生的概率,
P
(
c
)
P(c)
P(c)表示训练集中类别为c的样本的概率。
可以发现,我们能轻易地得到
P
(
c
)
、
P
(
x
)
P(c)、P(x)
P(c)、P(x),对
P
(
x
∣
c
)
P(x|c)
P(x∣c)却很难估计,为此,贝叶斯分类就加上了“朴素”二字,我们知道样本x包含多个特征,朴素贝叶斯的重要假定就是所有特征相互独立,每个特征独立的对分类结果发生影响,如我们上面数据中的年龄、收入、爱打游戏都能独立对顾客是否购买电脑产生影响。
于是上述的公式就变成:
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}^dP(x_i|c)
P(c∣x)=P(x)P(x∣c)P(c)=P(x)P(c)i=1∏dP(xi∣c)
其中d为特征数目,
x
i
x_i
xi表示样本x在第i个特征下的取值。将第c个类别的每个特征下该样本取值发生的概率相乘就是在第c个类别下该样本发生的概率。由于
P
(
x
)
P(x)
P(x)与类别无关,故只需要研究
P
(
c
)
∏
i
=
1
d
P
(
x
i
∣
c
)
P(c)\prod_{i=1}^dP(x_i|c)
P(c)∏i=1dP(xi∣c)即可。
若能找到一个类别c,使
P
(
c
∣
x
)
P(c|x)
P(c∣x)最大,我们就将样本x标记为c。所以朴素贝叶斯分类器的表达式如下:
h
n
b
(
x
)
=
a
r
g
m
a
x
c
∈
y
P
(
c
)
∏
i
=
1
d
P
(
x
i
∣
c
)
h_{nb}(x)=\underset {c\in{y}}{argmax}P(c)\prod_{i=1}^dP(x_i|c)
hnb(x)=c∈yargmaxP(c)i=1∏dP(xi∣c)
其中
P
(
c
)
P(c)
P(c)就是c类样本个数占总样本的比例,写成:
P
(
c
)
=
∣
D
c
∣
∣
D
∣
P(c)=\frac{|D_c|}{|D|}
P(c)=∣D∣∣Dc∣,
D
c
D_c
Dc表示训练集D中第c类样本的集合。
下面估计
P
(
x
i
∣
c
)
P(x_i|c)
P(xi∣c),对不同类型的数据有不同的方法:
1),离散型特征数据:
P
(
x
i
∣
c
)
=
∣
D
c
,
x
i
∣
∣
D
c
∣
P(x_i|c)=\frac{|D_{c_,x_i}|}{|D_c|}
P(xi∣c)=∣Dc∣∣Dc,xi∣
D
c
,
x
i
D_{c_,x_i}
Dc,xi表示
D
c
D_c
Dc中样本第i个特征下取值为
x
i
x_i
xi的集合,整体表示第c类样本中的第i个特征取值为
x
i
x_i
xi的个数占总第c类样本的个数。
2),连续型特征数据:
由于连续型数据无法像离散型数据一样度量频数,如上面的年龄特征改成体重,故要引入概率密度函数。
朴素贝叶斯假定一类样本的连续型特征数据服从正态分布,均值和标准差分别是第c类样本在该特征下的均值和方差,则由正态分布概率密度函数有:
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{\pi}}\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)
其中
μ
c
,
i
,
σ
c
,
i
\mu_{c,i},\sigma_{c,i}
μc,i,σc,i表示第c个类别样本组成的集合中第i个特征(为连续型特征)的均值与方差。
问题解决
回到我们的问题上,为了计算方便,就假设前面5个样本就是我们的训练样本(实战中并不可能),假设现在出现了一个顾客,通过观察或沟通了解到他的特征如下:
顾客编号 | 年龄 | 收入状况 | 是否爱打游戏 | 是否购买电脑 |
---|---|---|---|---|
51 | 中 | 高 | 是 | ? |
将买电脑的类别标记为0,不买电脑的类别标记为1,这个新顾客编号为51。
他买电脑的概率是:
P
(
c
=
0
∣
x
=
51
)
=
P
(
c
=
0
)
P
(
x
)
∏
i
=
1
3
P
(
x
i
∣
c
=
0
)
=
3
5
×
1
3
×
1
3
×
2
3
P
(
x
)
=
2
/
45
P
(
x
)
P(c=0|x=51)=\frac{P(c=0)}{P(x)}\prod_{i=1}^3P(x_i|c=0)=\frac{\frac{3}{5}\times\frac{1}{3}\times\frac{1}{3}\times\frac{2}{3}}{P(x)}=\frac{2/45}{P(x)}
P(c=0∣x=51)=P(x)P(c=0)i=1∏3P(xi∣c=0)=P(x)53×31×31×32=P(x)2/45
他不买电脑的概率是:
P
(
c
=
1
∣
x
=
51
)
=
P
(
c
=
1
)
P
(
x
)
∏
i
=
1
3
P
(
x
i
∣
c
=
1
)
=
2
5
×
1
×
1
2
×
1
2
P
(
x
)
=
1
/
10
P
(
x
)
P(c=1|x=51)=\frac{P(c=1)}{P(x)}\prod_{i=1}^3P(x_i|c=1)=\frac{\frac{2}{5}\times1\times\frac{1}{2}\times\frac{1}{2}}{P(x)}=\frac{1/10}{P(x)}
P(c=1∣x=51)=P(x)P(c=1)i=1∏3P(xi∣c=1)=P(x)52×1×21×21=P(x)1/10
其中
P
(
x
)
P(x)
P(x)与类别无关,可以不考虑,很明显
P
(
c
=
0
∣
x
=
51
)
<
P
(
c
=
1
∣
x
=
51
)
P(c=0|x=51)<P(c=1|x=51)
P(c=0∣x=51)<P(c=1∣x=51),该名新顾客不买电脑的概率了大于买电脑的概率,故我们可以初步认定该名新顾客不会购买电脑。
新问题出现
若现在店里又来了一个顾客,其特征如下表:
顾客编号 | 年龄 | 收入状况 | 是否爱打游戏 | 是否购买电脑 |
---|---|---|---|---|
52 | 大 | 高 | 是 | ? |
此时显然根据我们现有的数据看出,
P
(
x
1
=
大
∣
c
=
1
)
=
0
P(x_1=大|c=1)=0
P(x1=大∣c=1)=0,若我们再按照前面的方法计算该顾客不购买电脑的概率时,无论该顾客其他特征如何,其不购买电脑的概率始终是0,但这显然不符合现实。这个问题出现的原因就是训练集中类别里样本并不完整,没有代表全部的可能性。
问题解决
解决这一问题的方法是“拉普拉斯修正”,它针对先验概率
P
(
c
)
P(c)
P(c)与条件概率
P
(
x
i
∣
c
)
P(x_i|c)
P(xi∣c)进行修正,修正后的式子如下(仅针对于离散型特征):
P
^
(
c
)
=
∣
D
c
∣
+
1
∣
D
∣
+
N
\hat{P}(c)=\frac{|D_c|+1}{|D|+N}
P^(c)=∣D∣+N∣Dc∣+1
P
^
(
x
i
∣
c
)
=
∣
D
c
,
x
i
∣
+
1
∣
D
c
∣
+
N
i
\hat{P}(x_i|c)=\frac{|D_{c,x_i}|+1}{|D_c|+N_i}
P^(xi∣c)=∣Dc∣+Ni∣Dc,xi∣+1
其中
N
N
N为训练集D中可能的类别数,如我们这里就是购买与不购买两种类别(N=2);
N
i
N_i
Ni表示第i个特征可能的取值数,如这里特征年龄可能取值为大、中(
N
i
N_i
Ni=2)。
此时再次估计第52为顾客的不购买电脑概率为:
P
(
c
=
1
∣
x
=
52
)
=
3
7
×
1
4
×
2
5
×
2
4
P
(
x
)
=
3
/
140
P
(
x
)
P(c=1|x=52)=\frac{\frac{3}{7}\times\frac{1}{4}\times\frac{2}{5}\times\frac{2}{4}}{P(x)}=\frac{3/140}{P(x)}
P(c=1∣x=52)=P(x)73×41×52×42=P(x)3/140
半朴素贝叶斯分类
前面提过,朴素贝叶斯为了简化条件概率的计算,提出的一个假设就是各特征间相互独立,但该假设在现实中很难实现。于是人们对该假设进行放松,考虑部分属性间的相互依赖,从而形成了“半朴素贝叶斯分类”。
假设,每个属性在类别之外最多依赖于一个其他属性,也称为独依赖:
P
(
c
∣
x
)
∝
P
(
c
)
∏
i
=
1
d
P
(
x
i
∣
c
,
p
a
i
)
P(c|x)\propto P(c)\prod_{i=1}^dP(x_i|c,pa_i)
P(c∣x)∝P(c)i=1∏dP(xi∣c,pai)
其中
p
a
i
pa_i
pai为样本在第i个属性所依赖的属性上的取值,被依赖的属性称为父属性,
∝
\propto
∝意思是成正比,
P
(
x
i
∣
c
,
p
a
i
)
P(x_i|c,pa_i)
P(xi∣c,pai)表示在第c类别与
p
a
i
pa_i
pai同时发生下
x
i
x_i
xi发生的概率,可由前面的拉普拉斯修正得到。此时问题就变成如何确定父属性(
p
a
pa
pa)。
1)SPODE方法
假设所有属性都依赖于同一个属性,称为“超父”,通过交叉验证确定“超父”,固定了公式里的
p
a
pa
pa,如(图b)所示(来自周志华《机器学习》),
x
1
x_1
x1作为唯一的超父。
2)AODE方法
AODE尝试将每个属性作为超父来构建SPODE,将拥有足够训练数据支撑的SPODE集成作为最终结果,公式如下:
P
(
c
∣
x
)
∝
∑
i
=
1
d
∣
D
x
i
∣
≥
m
′
P
(
c
,
x
i
)
∏
j
=
1
d
P
(
x
j
∣
c
,
x
i
)
P(c|x)\propto \underset{|D_{x_i}|\geq m^{'}}{\sum_{{i=1}}^{d}}P(c,x_i)\prod_{j=1}^dP(x_j|c_,x_i)
P(c∣x)∝∣Dxi∣≥m′i=1∑dP(c,xi)j=1∏dP(xj∣c,xi)
上述公式可以与上面一个公式对照一下,其中
D
x
i
D_{x_i}
Dxi表示第i个属性上值为
x
i
x_i
xi的样本的集合,
m
′
m^{'}
m′为阈值常数,对前面集合的阈值要求,若
D
x
i
D_{x_i}
Dxi中样本数小于
m
′
m^{'}
m′,则不将该属性作为超父。
P
(
c
,
x
i
)
,
P
(
x
j
∣
c
,
x
i
)
P(c,x_i),P(x_j|c_,x_i)
P(c,xi),P(xj∣c,xi)有以下定义(可类比拉普拉斯修正):
P
(
c
,
x
i
)
=
∣
D
c
,
x
i
∣
+
1
∣
D
∣
+
N
×
N
i
P(c,x_i)=\frac{|D_{c,x_i}|+1}{|D|+N\times N_i}
P(c,xi)=∣D∣+N×Ni∣Dc,xi∣+1
P
(
x
j
∣
c
,
x
i
)
=
∣
D
c
,
x
i
,
x
j
∣
+
1
∣
D
c
,
x
i
∣
+
N
j
P(x_j|c_,x_i)=\frac{|D_{c,x_i,x_j}|+1}{|D_{c,x_i}|+N_j}
P(xj∣c,xi)=∣Dc,xi∣+Nj∣Dc,xi,xj∣+1
其中N是D中可能的类别数,
N
i
N_i
Ni是第i个属性可能的取值数,
N
j
N_j
Nj同理,
D
c
,
x
i
D_{c,x_i}
Dc,xi是类别为第c类且在第i属性上取值为
x
i
x_i
xi的集合,
D
c
,
x
i
,
x
j
D_{c,x_i,x_j}
Dc,xi,xj同理。
《机器学习》读书笔记 思考 2021/7/25