朴素Bayes方法是一个经典的生成学习方法,基本思想也是对P(x | y)这个后验概率进行建模。这里我们先说明一下什么是先验概率,以及什么是后验概率。
先验概率
谈先验概率之前有必要了解一下先验概率分布,不敢说本质,笔者对先验概率分布的了解如下:
先验概率分布就是我们对一个事件所发生的概率分布假设。比如:抛硬币实验,我们认为在抛硬币实验进行前,硬币的出现结果服从:出现正面1和出现反面0的二项分布。
当然,看官们可能认为这是常识,但是,我们依然可以对抛硬币实验做另外一个不同的结果分布假设,硬币的出现结果服从:出现正面1和出现反面0,和出现‘硬币立起来’的多项式分布。
这里的二项分布和多项式分布均为人为假设的先验概率分布。
什么是先验概率?
我们应该知道,‘某一个具体事件’是否发生是一个未来事件。比如,给你一枚硬币,在你没抛出硬币之前,这时候,你根据以往经验得知,我们抛硬币的先验概率分布是2项分布,出现正面朝上的概率为
12
1
2
。这里正面朝上的概率为
p(A)=12
p
(
A
)
=
1
2
就是先验概率。
p(A)
p
(
A
)
是怎样来的呢?我们说是已有经验。在机器学习中,经验表示的显然是Training set。
举个栗子:
给定一组训练数据
{xi,yi}ni=1
{
x
i
,
y
i
}
i
=
1
n
独立同分布,
yi∈{0,1}
y
i
∈
{
0
,
1
}
,那么显然,我们目标变量的先验概率分布就是二项分布。
p(y=0)
p
(
y
=
0
)
和
p(y=1)
p
(
y
=
1
)
就是先验概率,而先验概率是根据经验得到的!所以,学习算法根据训练集,估计
p(y=0)=∑ni=1I{yi=0}n p ( y = 0 ) = ∑ i = 1 n I { y i = 0 } n , p(y=1)=1−p(y=0) p ( y = 1 ) = 1 − p ( y = 0 ) 。
你说这玩意儿准不准?由Bernouli大数定律可知,当训练集样本比较多的时候就准。
这一句是个人理解:注意!这里你完全可以附加一个你认为的先验概率!这是完全OK的!!!举个栗子,你在给学习算法一些训练数据之前,你给他一个Knowledge: p(y=1)=p(y=0)=12 p ( y = 1 ) = p ( y = 0 ) = 1 2 。
但是,没办法啊,如果你不给学习算法这个/这些Knowledge。那么学习算法在我们看来就是一个刚出生的婴儿。你要给它训练数据,它才有经验,才可能给你做一些你想要的决策。至于经验(训练数据)的多少,这个自己就看着办了。当然,数据多了,学习算法对 p(y) p ( y ) 的估计就越准。
同理,p(x)我们也认为是先验概率,x服从的概率分布也是人为假设或者由训练样本去估计的先验概率分布。
再举个栗子:
两个人:A君和B君。A用多元高斯分布产生一组随机自变量的值;然后A把这些值给B,并告诉B这组值是独立同分布的,但不告诉B这组随机自变量的值服从什么分布。那么,B有两种方法猜测这个未知分布。
1. 直接问A;
2. 用训练数据估计概率分布。
第一种方法就对应的是人为假设!第2种方法对应的就是估计。当然,对于第一种办法:B问A的话,A完全有可能欺骗B,这时候,人为假设就会出错!对于第二种办法:估计就比较麻烦了,得看数据的特性,画出直方图等等一系列辅助我们做估计的东西。然后看它像哪种分布。
一般情况下都是第一种办法,也就是人为假设数据服从一种具体的分布。比如,我们假设 x x ~ 这种正态分布,至于其中的参数 μ μ 和 σ σ ,一种是直接给定,一般情况下是通过数据进行估计。
后验概率
嘛是后验概率?咱们从字面意思理解:后面去验证的概率。机器学习的目标就是由自变量的值去预测因变量的值。在我们拿到一个自变量之后,去预测这个自变量对应的因变量值出现的概率,这就是后验概率。也就是说,后验概率其实是机器学习的一般目标。稍微正式一点的描述如下:
x是自变量,y是预测目标。后验概率是一种条件概率: p(y|x) p ( y | x ) :即在给定自变量条件下,某个因变量的值出现的概率。
条件概率
我们在上一章说到,后验概率是一种条件概率。那么条件概率是什么呢?假设两个事件A和B,在B发生的条件下,求A发生的概率P(A | B)即为条件概率。若事件A和事件B相互独立,那么P(A) = P(A | B)。举个栗子:若事件A表示第一次掷硬币出现正面朝上,事件B表示第2次掷硬币出现正面朝上。那么显然,事件A和事件B是相互独立的。
再扯飘一点:量子纠缠理论出现后,鬼知道宇宙中任意两个事件是不是相互独立的。
Naive Bayes
朴素Bayes是一种经典的生成学习方法,它的基本假设是条件独立性假设。
对后验概率
P(x|y)
P
(
x
|
y
)
建模,然后利用贝叶斯公式
P(y|x)=P(x|y)P(y)P(x)
P
(
y
|
x
)
=
P
(
x
|
y
)
P
(
y
)
P
(
x
)
得到后验概率。
条件独立性假设是指条件属性之间相互独立,那么
P(x|y)=∏mi=1P(xi|y)
P
(
x
|
y
)
=
∏
i
=
1
m
P
(
x
i
|
y
)
,
其中
xi
x
i
表示样本x的第i个属性上的取值。
令
(xi,yi)ni=1
(
x
i
,
y
i
)
i
=
1
n
为训练集,其中
yi∈{1,…,k}
y
i
∈
{
1
,
…
,
k
}
,
D={D1,…,Dk}
D
=
{
D
1
,
…
,
D
k
}
,其中
Di
D
i
表示第i个类别的样本集合。
先验概率的估计:
P(y=c)=|Dc|n
P
(
y
=
c
)
=
|
D
c
|
n
;
对离散型的条件属性来说,条件概率的估计
P(xi|y=c)=|Dc,xi||Dc|
P
(
x
i
|
y
=
c
)
=
|
D
c
,
x
i
|
|
D
c
|
,其中
Dc,xi
D
c
,
x
i
表示第c个类别中样本x在第i个属性上的取值为
xi
x
i
的样本集合。
对连续型的条件属性来说,考虑概率密度函数,条件概率的估计
P(xi|y=c)=12π√σc,xie−(xi−μc,xi)22σ2c,i
P
(
x
i
|
y
=
c
)
=
1
2
π
σ
c
,
x
i
e
−
(
x
i
−
μ
c
,
x
i
)
2
2
σ
c
,
i
2
。
然后选择使得后验概率最大的决策属性作为一个新样本的分类决策,即
c∗=argmaxc∈{1,…,k}P(y=c|x)=argmaxc∈{1,…,k}P(x|y=c)P(y=c)
c
∗
=
a
r
g
m
a
x
c
∈
{
1
,
…
,
k
}
P
(
y
=
c
|
x
)
=
a
r
g
m
a
x
c
∈
{
1
,
…
,
k
}
P
(
x
|
y
=
c
)
P
(
y
=
c
)
=argmaxc∈{1,…,k}P(y=c)∏mi=1P(xi|y=c)
=
a
r
g
m
a
x
c
∈
{
1
,
…
,
k
}
P
(
y
=
c
)
∏
i
=
1
m
P
(
x
i
|
y
=
c
)
。
为了避免因数太小导致运行时溢出,实践中经常将连乘转化为对数连加的方法。