一、瞻仰先人:贝叶斯介绍:
贝叶斯(约1701-1761) Thomas Bayes,英国数学家。约1701年出生于伦敦,做过神甫。1742年成为英国皇家学会会员。1761年4月7日逝世。贝叶斯在数学方面主要研究概率论。他首先将归纳推理法用于概率论基础理论,并创立了贝叶斯统计理论,对于统计决策函数、统计推断、统计的估算等做出了贡献。他死后,理查德·普莱斯 (Richard Price)于1763年将他的著作《机会问题的解法》(An essay towards solving a problem in the doctrine of chances)寄给了英国皇家学会,对于现代概率论和数理统计产生了重要的影响。
–-----------------------------------------------------------------------------—----------------------------------------
–-----------------------------------------------------------------------------—----------------------------------------
–-----------------------------------------------------------------------------—----------------------------------------
二、贝叶斯公式介绍:
2.1、公式定义:
设
A
1
,
A
2
,
.
.
.
,
A
n
A_1,A_2,...,A_n
A1,A2,...,An为一个完备事件组,其中
P
(
A
)
>
0
,
i
=
1
,
2
,
.
.
.
,
n
P(A)>0,i=1,2,...,n
P(A)>0,i=1,2,...,n。则对于任意事件B,如果
P
(
B
)
>
0
P(B)>0
P(B)>0,则有:
- 上公式前半段解释:在B事件发生的概率下, A k A_k Ak事件发生的概率= A k A_k Ak、B事件发生的联合概率/B事件发生的概率;
- 上公式前半段除式变乘式,贝叶斯公式也即:P(AB)=P(A|B)P(B)=P(B|A)P(A);用Venn图表示即为下左图:
- 上公式前半段的分母P(B)用全概率公式展开为: P ( B ) = P(B)= P(B)= ∑ \sum ∑ P ( A i ) P ( B ∣ A i ) P(A_i)P(B|A_i) P(Ai)P(B∣Ai),全概率公式可参见上右图;
- 结合上面的2、3步,即可得到贝叶斯公式的后半段;
- 我们常把 P ( A k ∣ B ) P(A_k|B) P(Ak∣B)称为后验概率, P ( A k ) P(A_k) P(Ak)称为先验概率, P ( B ∣ A k ) P(B|A_k) P(B∣Ak)称为似然函数。【似然函数解释:给定输出x时,关于参数θ的似然函数L(θ|x),在数值上等于给定参数θ后变量X的概率:L(θ|x)=P(X=x|θ)】——所以贝叶斯公式也说明:后验概率是可以通过先验概率和似然函数计算出来的。这就是贝叶斯流派认同的观点;
–-----------------------------------------------------------------------------—----------------------------------------
2.2、出个小题:
已知一所学校里男生占60%,女生占40%,男生总是穿长裤,女生则一半穿长裤一半穿裙子。问:你在校园里随机遇到一个穿长裤的人,Ta是男生的概率是多少?
–-----------------------------------------------------------------------------—------------------------------------–
–-----------------------------------------------------------------------------—------------------------------------–
–-----------------------------------------------------------------------------—------------------------------------–
三、朴素贝叶斯算法原理:
3.1、朴素贝叶斯算法简介:(重点)
在分类问题中,我们常常需要根据新样本所具有的属性将其划分到某个类别中;
- 我们有一个训练集,也叫样本空间 C = X 1 , X 2 , . . . , X n C=X_1,X_2,...,X_n C=X1,X2,...,Xn;
- 当一个样本 X X X具有多条属性时,把它的众多属性看做是一个向量,即样本 X = ( x 1 , x 2 , . . . , x n ) X=(x_1,x_2,...,x_n) X=(x1,x2,...,xn);(这里 X X X是样本, x i x_i xi是样本具有的属性,组成样本空间);
- 样本空间具有的所有类别标签: Y = ( y 1 , y 2 , . . . , y m ) Y=(y_1,y_2,...,y_m) Y=(y1,y2,...,ym);样本空间每一条样本 X X X都对应一个类别标签 y y y;
- 计算新样本 X 0 X_0 X0属于每一个类别标签的概率: P ( y 1 ∣ X 0 ) , P ( y 2 ∣ X 0 ) , . . . , P ( y m ∣ X 0 ) P(y_1|X_0),P(y_2|X_0),...,P(y_m|X_0) P(y1∣X0),P(y2∣X0),...,P(ym∣X0);
- 如果 P ( y k ∣ X 0 ) = m a x ( P ( y 1 ∣ X 0 ) , P ( y 2 ∣ X 0 ) , . . . , P ( y m ∣ X 0 ) ) P(y_k|X_0)=max(P(y_1|X_0),P(y_2|X_0),...,P(y_m|X_0)) P(yk∣X0)=max(P(y1∣X0),P(y2∣X0),...,P(ym∣X0)),就把新样本 X 0 X_0 X0划分到 y k y_k yk类。(将概率最大的类别标签 y k y_k yk作为新样本 X X X的标签);
–-----------------------------------------------------------------------------—----------------------------------------
3.2、如何计算 P ( y k ∣ X ) P(y_k|X) P(yk∣X)
从上面3.1的简介里可以看出,最重要的一步就是第4步,那么如何计算
P
(
y
k
∣
X
)
P(y_k|X)
P(yk∣X)就是这里研究的重点:
说明:上式的计算方法是假设在
x
1
,
x
2
,
.
.
.
,
x
n
x_1,x_2,...,x_n
x1,x2,...,xn相互独立的基础上,而在工业运用上
x
1
,
x
2
,
.
.
.
,
x
n
x_1,x_2,...,x_n
x1,x2,...,xn大多不是完全相互独立的,所以上式应该为约等于。而如果
x
1
,
x
2
,
.
.
.
,
x
n
x_1,x_2,...,x_n
x1,x2,...,xn的相关性很强,也就是
x
k
,
x
l
x_k,x_l
xk,xl可能相互影响时,就建议不要用朴素贝叶斯的方法,得到的效果会很差。
–-----------------------------------------------------------------------------—----------------------------------------
3.3、举例
有下面这个相亲数据表,问:当有一个具有(矮、富、帅)的新样本出现,是见还是不见?
- 分析:其实就是用朴素贝叶斯求 m a x ( P ( 见 ∣ [ 矮 、 富 、 帅 ] ) , P ( 不 见 ∣ [ 矮 、 富 、 帅 ] ) ) max(P(见|[矮、富、帅]),P(不见|[矮、富、帅])) max(P(见∣[矮、富、帅]),P(不见∣[矮、富、帅])),
以下是
P
(
见
∣
[
矮
、
富
、
帅
]
)
P(见|[矮、富、帅])
P(见∣[矮、富、帅])的计算过程,有兴趣的伙伴自己计算
P
(
不
见
∣
[
矮
、
富
、
帅
]
)
P(不见|[矮、富、帅])
P(不见∣[矮、富、帅])
举例说明
P
(
矮
∣
见
)
=
P(矮|见)=
P(矮∣见)=
1
3
1 \over 3
31的计算过程:
在上面数据集中,“见”总共有3条数据,在这3条数据中,“矮”出现了1次,所以
P
(
矮
∣
见
)
=
P(矮|见)=
P(矮∣见)=
1
3
1 \over 3
31
–-----------------------------------------------------------------------------—----------------------------------------
3.4、拉普拉斯修正:
如果数据集变成如下,还是(矮、富、帅)这个样本出现,是见还是不见?
分析:还是用朴素贝叶斯求
m
a
x
(
P
(
见
∣
[
矮
、
富
、
帅
]
)
,
P
(
不
见
∣
[
矮
、
富
、
帅
]
)
)
max(P(见|[矮、富、帅]),P(不见|[矮、富、帅]))
max(P(见∣[矮、富、帅]),P(不见∣[矮、富、帅])),但是出现了问题:
由于
P
(
矮
∣
见
)
=
P(矮|见)=
P(矮∣见)=
0
2
0 \over 2
20
=
0
=0
=0,那么计算出来的
P
(
见
∣
[
矮
、
富
、
帅
]
)
P(见|[矮、富、帅])
P(见∣[矮、富、帅])也是等于0。数据集的特例,对我们的计算结果产生了影响,为了规避这个情况,我们就需要引入拉普拉斯修正的方法:
拉普拉斯修正公式:分子+1,分母+k
解释:
- k :是样本空间具有的所有类别标签的总个数;
- 分子:是标签= y k y_k yk且样本属性= x n x_n xn样本的个数;
- 分母:是标签= y k y_k yk的样本个数;
结合上面,就是把
P
(
矮
∣
见
)
=
P(矮|见)=
P(矮∣见)=
0
2
0 \over 2
20的分子+1,分母+k;
由于样本空间的类别标签
Y
=
(
见
,
不
见
)
Y=(见,不见)
Y=(见,不见),所以
k
=
2
k=2
k=2,
经过拉普拉斯修正后:
P
(
矮
∣
见
)
=
P(矮|见)=
P(矮∣见)=
0
+
1
2
+
2
0+1 \over 2+2
2+20+1,
P
(
富
∣
见
)
=
P(富|见)=
P(富∣见)=
2
+
1
2
+
2
2+1 \over 2+2
2+22+1,
P
(
帅
∣
见
)
=
P(帅|见)=
P(帅∣见)=
1
+
1
2
+
2
1+1 \over 2+2
2+21+1,所以
有兴趣的伙伴自己计算
P
(
不
见
∣
[
矮
、
富
、
帅
]
)
)
P(不见|[矮、富、帅]))
P(不见∣[矮、富、帅])),记得要使用拉普拉斯修正;
计算后比较“见”与“不见”两个数值,哪个大就选择哪个;
这以上就是朴素贝叶斯算法所有的内容。
–-----------------------------------------------------------------------------—----------------------------------------
–-----------------------------------------------------------------------------—----------------------------------------
–-----------------------------------------------------------------------------—----------------------------------------
四、高斯贝叶斯算法:
以上的例子用到的数据都是离散化的数据,但如果遇到下面连续数值怎么处理呢?
我们需要将连续的数值转化为离散的数据,以下介绍两种方法:
–-----------------------------------------------------------------------------—----------------------------------------
4.1、分箱法:
将连续数据分段形成离散数据的预处理方法。以170分出高矮、20K分出富穷、60分出帅丑,得到离散数据如下:
出现问题:分箱法更多依赖于经验,按照上面的分箱法,170与190都被分作“高”,显然差距有点大,有没有什么方法能更好的保持原有数据的特征,又能表达概率的呢!
–-----------------------------------------------------------------------------—----------------------------------------
4.2、高斯分布(正态分布):
我们只需计算各类特征下的均值和方差:
比如:有以下样本空间,问(170,30k,70)是见还是不见?
分析:还是计算
m
a
x
(
P
(
见
∣
[
170
,
30
k
,
70
]
)
,
P
(
不
见
∣
[
170
,
30
k
,
70
]
)
)
max(P(见|[170,30k,70]),P(不见|[170,30k,70]))
max(P(见∣[170,30k,70]),P(不见∣[170,30k,70]))
解:求
P
(
见
∣
[
170
,
30
k
,
70
]
)
P(见|[170,30k,70])
P(见∣[170,30k,70])
P
(
见
∣
[
170
,
30
k
,
70
]
)
=
[
(
P
(
170
∣
见
)
∗
P
(
30
K
∣
见
)
∗
P
(
70
∣
见
)
)
∗
P
(
见
)
]
/
[
P
(
170
)
∗
P
(
30
k
)
∗
P
(
70
)
]
P(见|[170,30k,70])=[(P(170|见)*P(30K|见)* P(70|见))*P(见)]/[P(170)* P(30k)* P(70)]
P(见∣[170,30k,70])=[(P(170∣见)∗P(30K∣见)∗P(70∣见))∗P(见)]/[P(170)∗P(30k)∗P(70)]
以特征1-身高为例:
若“身高”的均值为180,标准差为8.24,则
P
(
170
∣
见
)
P(170|见)
P(170∣见)的概率为:
剩下的以特征2-财富值、特征3-颜值的计算过程也是带入上公式。
–-----------------------------------------------------------------------------—----------------------------------------
–-----------------------------------------------------------------------------—----------------------------------------
–-----------------------------------------------------------------------------—----------------------------------------
结束语:
- 朴素贝叶斯算法原理就到这里。除去高斯贝叶斯外,还有多项式贝叶斯、伯努利贝叶斯,有兴趣的同学自己研究。博主也会在以后继续更新。
- 代码在sklearn都有范例,也比较简单。
- 下一篇博客是《【机器学习】10:朴素贝叶斯做酒店评论分类》,是这篇博客的实战,有兴趣的伙伴继续交流。