写在前面
本博客是本人专用于记录各类算法的学习笔记,水平有限,还望大家多多赐教。
贝叶斯分类器
贝叶斯分类器是一种基于贝叶斯决策理论的分类器。
贝叶斯决策理论
在实际应用中,会出现很多案例与类标签之间的关系是不确定的。也就是说,测试记录的样本与某些训练样例相同,但是也不能正确地预测它的类标签。产生这种现象的原因可能是噪声,或者是存在潜在影响因素。例如,考虑根据一个人的饮食和锻炼频率预测他是否患有心脏病的危险。这个问题是具有不确定性的,因为虽然饮食健康且经常锻炼的人患心脏病的概率很小,但是可能存在遗传、过量吸烟等原因而患病。贝叶斯定理(Bayes theorem)就是将类先验知识与从数据中收集的新证据相结合的统计原理。
(1)
P
(
Y
∣
X
)
=
P
(
X
∣
Y
)
P
(
Y
)
P
(
X
)
P(Y|X)=\frac{P(X|Y)P(Y) }{ P(X)} \tag{1}
P(Y∣X)=P(X)P(X∣Y)P(Y)(1)
在分类应用中,贝叶斯决策就是了为了获得后验概率 P(Y|X),X为样本,Y为类别,利用了贝叶斯定理(使用先验概率P(Y)、类条件概率[我们常称为似然]P(X|Y)和证据 P(X)来表示后验概率。对于给定样本,证据因子P(X)与类标签无关,所以估计P(Y|X)的问题就可以转化为如何基于训练数据来估计先验和似然),解决了直接获得后验概率的困难,是一种生成模型。
——————————————————————————————————————————————————————
贝叶斯判定准则(Bayes decision rule):
(2)
{
P
(
y
1
∣
x
)
>
P
(
y
2
∣
x
)
x归为
y
1
类
P
(
y
1
∣
x
)
<
P
(
y
2
∣
x
)
x归为
y
2
类
\begin{cases} P(y_1|x)>P(y_2|x)& \text{x归为$y_1$类}\\ P(y_1|x)<P(y_2|x)& \text{x归为$y_2$类} \end{cases}\tag{2}
{P(y1∣x)>P(y2∣x)P(y1∣x)<P(y2∣x)x归为y1类x归为y2类(2)
是一种判别式模型,给定x直接建模P(y|x)来预测y。但是,在实际任务中这通常难以直接获得。
——————————————————————————————————————————————————————
接下来,介绍两种贝叶斯分类方法的实现:朴素贝叶斯分类器(Naive Bayes Classifier,NB)和贝叶斯信念网络(Bayesian Belief Networks,BBN)。
朴素贝叶斯分类器
-
前提假设:属性条件独立:对已知类别,假设所有属性相互独立。这就是朴素之处,只做最原始、最简单的假设。
这个假设避开了直接从优先样本中估计联合概率P(x|y)这个障碍,也就是假设每个属性独立地对分类结果发生影响。基于属性条件独立性假设,原来的贝叶斯定理(1)可以写成:
(3) P ( Y ∣ X ) = P ( X ∣ Y ) P ( Y ) P ( X ) = P ( Y ) P ( X ) ∏ i d P ( x i ∣ y i ) P(Y|X)=\frac{P(X|Y)P(Y) }{ P(X)} =\frac{P(Y) }{ P(X)}\prod_i^d{P(x_i|y_i)}\tag{3} P(Y∣X)=P(X)P(X∣Y)P(Y)=P(X)P(Y)i∏dP(xi∣yi)(3)
其中每个属性集 X = ( x 1 , x 2 , . . . x d ) X=(x_1,x_2,...x_d) X=(x1,x2,...xd),包含d个属性。 -
训练过程:训练样本D
(1)基于训练集D,对每个类别y进行计算 P ( y i ) P(y_i) P(yi);
(2)对每个特征 x i x_i xi计算所有划分的条件概率 P ( x i ∣ y j ) , j = 1 , . . , m P(x_i|y_j),j=1,..,m P(xi∣yj),j=1,..,m; -
预测过程:
(1)对每个类别计算计算 P ( X ∣ y i ) P ( y i ) P(X|y_i)P(y_i) P(X∣yi)P(yi)
(2)以 P ( X ∣ y i ) P ( y i ) P(X|y_i)P(y_i) P(X∣yi)P(yi)的最大项作为X的所属类别。
在实际应用中,很可能遇到某个属性值在训练集中没有与某个类同时出现过,那么就会导致在估计条件概率P(X|Y)时出现概率为0(连乘导致的)。解决的方法就是使用MAP(最大后验估计)方法来估计条件概率: (4) P ( x i ∣ y i ) = n c + m p n + m P(x_i|y_i)=\frac{n_c+mp}{ n+m } \tag{4} P(xi∣yi)=n+mnc+mp(4)
其中,n是类 y i y_i yi中实例总数, n c n_c nc是类 y i y_i yi的训练样例中的取值 x i x_i xi的样例数,m是称为等价样本大小的参数,而p是用户指定的参数。如果没有训练集(即n=0),则 P ( x i ∣ y i ) = p P(x_i|y_i)=p P(xi∣yi)=p,可以看出是一个额外引入的先验概率。 -
优缺点
优点 | 缺点 |
---|---|
在数据较少的情况下仍然有效,可处理多类别的问题 | 对于输入数据的准备方式较为敏感 |
朴素贝叶斯分类器的收敛速度将快于判别模型,比如逻辑回归 | 不能学习特征间的相互作用 |
对缺失数据不太敏感,算法也比较简单,常用于文本分类 | 需要计算先验概率 |
朴素贝叶斯对结果解释容易理解 | 分类决策存在错误率 |
适用于当特征空间的维数很高时,使得密度估计很难时,朴素贝叶斯简化了估计。也正是因为简化了模型,大部分场合都会使Bias部分大于Variance部分,也就是说高偏差而低方差。
- 朴素贝叶斯应用领域
- 欺诈检测中使用较多
- 一封电子邮件是否是垃圾邮件
- 一篇文章应该分到科技、政治,还是体育类
- 一段文字表达的是积极的情绪还是消极的情绪?
- 人脸识别
贝叶斯信念网络
朴素贝叶斯分类器的条件独立假设太严格了,特别是对有些属性之间有一定相关性的分类问题。所有陆续提出了一些不要求给定类的所有属性都是条件独立,而是允许指定哪些属性条件独立的方法,如贝叶斯信念网络和半朴素贝叶斯等。
- 模型表示
贝叶斯信念网络也称为贝叶斯网络,它借助有向无环图来表示属性之间的依赖关系,用条件概率表来描述属性的联合概率分布,如下图。是概率图模型(概率图模型是用图来表示变量概率依赖关系的理论,结合概率论与图论的知识,利用图来表示与模型有关的变量的联合概率分布。)中一个最基础的模型。
给定父结点集,BBN假设每个属性与它的非后裔属性独立,于是BBN将属性
x
1
,
x
2
,
.
.
.
x
d
x_1,x_2,...x_d
x1,x2,...xd的联合概率分布定义为:
(5)
P
B
(
x
1
,
x
2
,
.
.
.
x
d
)
=
∏
i
d
P
(
x
i
∣
π
i
)
P_B(x_1,x_2,...x_d)=\prod_i^d{P(x_i|\pi_i)}\tag{5}
PB(x1,x2,...xd)=i∏dP(xi∣πi)(5)
π
i
\pi_i
πi为$ x_i$对应的父节点。例如:
因为a导致b,a和b导致c,所以有
p
(
c
,
a
,
b
)
=
p
(
c
∣
a
,
b
)
p
(
b
∣
a
)
p
(
a
)
p(c,a,b)=p(c|a,b)p(b|a)p(a)
p(c,a,b)=p(c∣a,b)p(b∣a)p(a)
- 建立模型
BBN建立模型主要包括两部分:创建网络结构和估计每一个结点的概率表中的概率值。
当然,若网络结构已知,也就是属性间的依赖关系已知,则BBN的学习过程相对简单,只需通过对训练样本"计数",估计出每个结点的条件概率表即可。但是实际中,并不知道网络结构,所以,首先要创建网络结构,确定随机变量间的拓扑关系,形成DAG(有向无环图)。具体来说,一般是先定义一个评分函数来评估BBN与训练数据的契合程度,然后基于这个评分函数找到结构最优的BBN。
得到网络结构后,就开始训练贝叶斯网络。可以使用梯度下降法。
- BBN应用和示例
贝叶斯网络作为一种不确定性的因果推理模型,其应用范围非常广,在医疗诊断、信息检索、电子技术与工业工程等诸多方面发挥重要作用。
就使用方法来说,贝叶斯网络主要用于概率推理及决策,具体来说,就是==在信息不完备的情况下通过可以观察随机变量推断不可观察的随机变量,并且不可观察随机变量可以多于以一个,一般初期将不可观察变量置为随机值,然后进行概率推理。==下面举一个例子。
还是SNS社区中不真实账号检测的例子,我们的模型中存在四个随机变量:
账号真实性 | 头像真实性 | 日志密度 | 好友密度 |
---|---|---|---|
R | H | L | F |
其中H,L,F是可以观察到的值,而我们最关x心的R是无法直接观察的。这个问题就划归为通过H,L,F的观察值对R进行概率推理。推理过程可以如下表示:
(1) 使用观察值实例化H,L和F,把随机值赋给R。
(2) 计算
P
(
R
∣
H
,
L
,
F
)
=
P
(
H
∣
R
)
P
(
L
∣
R
)
P
(
F
∣
R
,
H
)
P(R|H,L,F)=P(H|R)P(L|R)P(F|R,H)
P(R∣H,L,F)=P(H∣R)P(L∣R)P(F∣R,H),其中相应概率值可以查条件概率表。
由于上述例子只有一个未知随机变量,所以不用迭代。更一般得,使用贝叶斯网络进行推理的步骤可如下描述:
<1>、对所有可观察随机变量节点用观察值实例化;对不可观察节点实例化为随机值。
<2>、对DAG进行遍历,对每一个不可观察节点y,计算
P
(
y
∣
w
i
)
=
α
P
(
y
∣
P
a
r
e
n
t
s
(
y
)
)
∏
j
P
(
s
j
∣
P
a
r
e
n
t
s
(
s
j
)
)
P(y|w_i)=\alpha P(y|Parents(y))\prod_j{P(s_j|Parents(s_j))}
P(y∣wi)=αP(y∣Parents(y))∏jP(sj∣Parents(sj)) ,其中
w
i
w_i
wi表示除y以外的其它所有节点,
α
\alpha
α为正规化因子,
s
j
s_j
sj表示y的第j个子节点。
<3>、使用第三步计算出的各个y作为未知节点的新值进行实例化,重复第二步,直到结果充分收敛。
<4>、将收敛结果作为推断值。
以上只是贝叶斯网络推理的算法之一,另外还有其它算法,这里不再详述。
总结
终于写完了第一篇,贝叶斯分类器,NB,BBN。花了很长时间整理,坚持,养成一个做笔记的好习惯,嘻嘻:》
[1]《机器学习实战》
[2] 《机器学习》
[3] 《数据挖掘导论》
[4]https://sylvanassun.github.io/2017/12/20/2017-12-20-naive_bayes/
[5]https://zhuanlan.zhihu.com/p/30139208
[6]https://www.cnblogs.com/leoo2sk/archive/2010/09/18/bayes-network.html