贝叶斯分类算法,是一类以贝叶斯定理为基础的分类算法,因为有非常扎实的数学理论基础,所以分类效果非常不错而且计算的开销也比较低。算法的难点是需要足够大的数据集以及如何表示概率,基于纯概率的一个算法
一、分类问题
最简单的分类问题,采用西瓜书的例子。你去选瓜的话,会根据瓜的各种特征(纹路,颜色,瓜蒂是否卷曲,拍打声。。。)来判断这个瓜是否成熟。基于的原理是我们的经验,每次我都买这样的瓜都是熟的。朴素贝叶斯也是这样的原理。
利用数学进行描述,已知集合C={y1,y2,…,yn}和I={X1,X2,…Xm}。其中每个X是一个样本,里面有含有不同的特征{x1,x2,…,xt}。我们希望找到一个映射y=f(X)。这个f其实就是我们的经验。
二、贝叶斯决策
2.1 后验概率
P{H0|x}是给定观测值x条件下H0出现的概率,统称为后验概率。学过概率论的对于这种形式知道这个是条件概率。
2.2 贝叶斯定理
贝叶斯分类的基础就是贝叶斯定理。
条件概率定义:
事件A在另外一个事件B已经发生条件下的发生概率。条件概率表示为P(A|B),读作“在B条件下A发生的概率”。
所以可以很简单的知道
P
(
A
∣
B
)
=
P
(
A
∩
B
)
/
P
(
B
)
P\left( A|B \right) \,\,=\,\,P\left( A\cap B \right) /P\left( B \right)
P(A∣B)=P(A∩B)/P(B)
所以可以得到以下公式
P
(
B
∣
A
)
⋅
P
(
A
)
=
P
(
A
∩
B
)
=
P
(
A
∣
B
)
⋅
P
(
B
)
P\left( B|A \right) \cdot P\left( A \right) \,\,=\,\,P\left( A\cap B \right) \,\,=\,\,P\left( A|B \right) \cdot P\left( B \right)
P(B∣A)⋅P(A)=P(A∩B)=P(A∣B)⋅P(B)
则可以得到贝叶斯定理
P
(
B
∣
A
)
=
P
(
A
∣
B
)
⋅
P
(
B
)
P
(
A
)
P\left( B|A \right) \,\,=\,\,\frac{P\left( A|B \right) \cdot P\left( B \right)}{P\left( A \right)}
P(B∣A)=P(A)P(A∣B)⋅P(B)
朴素贝叶斯分类
朴素贝叶斯就是将贝叶斯算法应用到分类之中。
(1)x=(x1,x2,…xD)表示含有D维属性的数据对象。训练集S含有K个类别,表示为y=(y1,y2,…yK)。
(2)已知待分类数据对象xx,预测xx所属类别,计算方式如下:
y
k
=
a
r
g
max
y
k
∈
y
(
P
(
y
k
∣
x
)
)
y_k\,\,=\,\,\underset{y_k\in y}{arg\,\,\max}\left( P\left( y_k|\text{x} \right) \right)
yk=yk∈yargmax(P(yk∣x))
所得yk即为x所属类别。上式表示,已知待分类数据对象x的情况下,分别计算x属于y1、y2、…、yK的概率,选取其中概率的最大值,此时所对应的yk,即为x所属类别。
(3)根据贝叶斯定理,P(yk|x)计算方式如下:
P
(
y
k
∣
x
)
=
P
(
x
∣
y
k
)
⋅
P
(
y
k
)
P
(
x
)
P\left( y_k|\text{x} \right) \,\,=\,\,\frac{P\left( \text{x}|y_k \right) \cdot P\left( y_k \right)}{P\left( \text{x} \right)}
P(yk∣x)=P(x)P(x∣yk)⋅P(yk)
计算过程中,P(x)对于P(yk|x),相当于常数。因此,若想得到P(yk|x)最大值,只需计算P(x|yk)P(yk)最大值。如果类别的先验概率未知,即P(yk)未知,则通常假定这些类别是等概率的,即P(y1)=P(y2)=…=P(yK)。
(4)假设数据对象xx的各属性之间相互独立,P(x|yk)计算方式如下:
P
(
x
∣
y
k
)
=
∏
d
=
1
D
P
(
x
d
∣
y
k
)
P\left( \text{x}|y_k \right) \,\,=\,\,\prod_{d=1}^D{P\left( x_d|y_k \right)}
P(x∣yk)=d=1∏DP(xd∣yk)
(5)P(xd|yk)的计算方式如下:
如果属性Ad是离散属性或分类属性。训练集中属于类别ykyk的数据对象,在属性AdAd下的相异属性值共有n个;训练集中属于类别yk,且在属性Ad下的属性值为xdxd的数据对象共有m个。因此,P(xd|yk)计算方式如下:
P
(
x
d
∣
y
k
)
=
m
n
P\left( x_d|y_k \right) \,\,=\,\,\frac{m}{n}
P(xd∣yk)=nm
如果属性AdAd是连续属性。通常假设连续属性均服从均值为μμ、标准差为σσ的高斯分布, 即
G
(
x
)
=
1
2
π
σ
e
−
(
x
−
μ
)
2
2
σ
2
G\left( x \right) =\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{\left( x-\mu \right) ^2}{2\sigma ^2}}
G(x)=2πσ1e−2σ2(x−μ)2
因此,P(xd|yk)P(xd|yk)计算方式如下:
P
(
x
d
∣
y
k
)
=
G
(
x
d
,
μ
y
k
,
σ
y
k
)
P\left( x_d|y_k \right) =G\left( x_d,\mu _{y_k},\sigma _{y_k} \right)
P(xd∣yk)=G(xd,μyk,σyk)
其中,μykμyk、σykσyk表示训练集中属于类别ykyk的数据对象在属性AdAd下的均值和标准差。
四、优缺点
优点:
(1) 算法逻辑简单,易于实现(算法思路很简单,只要使用贝叶斯公式转化一下即可!)
(2)分类过程中时空开销小(假设特征相互独立,只会涉及到二维存储)
缺点:
朴素贝叶斯为什么朴素,就是认为特征之间是相互独立的,这个是非常武断的。在数据简单的时候效果非常好,但是我们现在面对的任务数据非常的复杂,算法效果就真很好了。
参考文献:
https://blog.csdn.net/qq_17073497/article/details/81076250
https://blog.csdn.net/tanggao1314/article/details/66478782