贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故称为贝叶斯分类。
贝叶斯定理
已知某条件概率,如何得到两个时间交换后的概率,也就是在已知P(A|B)的情况下如何求得P(B|A)
P
(
B
∣
A
)
=
P
(
A
∣
B
)
P
(
B
)
P
(
A
)
P(B|A) = \frac{P(A|B)P(B)}{P(A)}
P(B∣A)=P(A)P(A∣B)P(B)
朴素贝叶斯分类
朴素贝叶斯(分类器)是一种生成模型,它会基于训练样本对每个可能的类别建模。之所以叫朴素贝叶斯,是因为采用了属性条件独立性假设,就是假设每个属性独立的对分类结果产生影响。
P
(
c
∣
x
)
=
P
(
c
)
P
(
x
∣
c
)
P
(
x
)
=
P
(
c
)
P
(
x
)
∏
i
=
1
d
P
(
x
i
∣
c
)
P(c|x) = \frac{P(c)P(x|c)}{P(x)} = \frac{P(c)}{P(x)}\prod_{i=1}^dP(x_i|c)
P(c∣x)=P(x)P(c)P(x∣c)=P(x)P(c)i=1∏dP(xi∣c)
后面连乘的地方, 如果有一项概率值为0会影响后面估计,所以我们对未出现的属性概率设置一个很小的值,并不为0,这就是拉普拉斯修正。
拉普拉斯修正实际上假设了属性值和类别的均匀分布,在学习过程中额外引入了先验识别。
- 准备工作阶段:根据具体情况确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本集合。
- 分类器训练阶段:计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录。
- 应用阶段:使用分类器对待分类项进行分类
半朴素贝叶斯分类
在朴素分类中,假定了各个属性之间的独立,这是为了计算方便,防止过多属性之间的依赖导致大量计算。虽然朴素贝叶斯分类效果不错,但是属性之间毕竟有关联,某个属性依赖于另外的属性,于是就有了半朴素贝叶斯分类器。
半朴素贝叶斯假定每个属性最多以来一个或k个其他属性。考虑属性间的相互依赖,但假定依赖只有一个或k个其他属性。半朴素贝叶斯分类器适当考虑一部分属性之间的相互依赖信息,从而既不需要进行联合概率计算,又不至于彻底忽略比较强的属性依赖关系
独依赖估计
独依赖估计(One-Dependent Estimator,ODE)是半朴素贝叶斯分类器最常用的一种策略。所谓“独依赖”就是假设每个属性在类别之外最多仅依赖于一个其他属性
于是半朴素贝叶斯分类器的公式为:
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是属性
x
i
x_i
xi所依赖的属性,
x
i
x_i
xi的父属性
问题的关键就转化为如何确定每个属性的父属性,不同的做法产生不同的独依赖分类器。
常见的版朴素贝斯算法SPODE和TAN
SPODE算法:假设所有属性都依赖同一个属性,这个属性是“超父”属性
TAN算法:通过做大带权生成树算法确定属性之间的依赖关系,就是每个属性找到跟自己最相关的属性,然后形成一个有向边
TAN算法
- 计算任意两个属性之间的田间互信息(CMI,即相互依赖程度)
I ( x i , x j ∣ y ) = ∑ x i , x j ; c ∈ y P ( x i , x j ∣ c ) l o g P ( x i , x j ∣ c P ( x i ∣ c ) P ( x j ∣ c ) I(x_i,x_j|y) = \sum_{x_i,x_j;c\in y}P(x_i,x_j|c)log \frac{P(x_i,x_j|c}{P(x_i|c)P(x_j|c)} I(xi,xj∣y)=xi,xj;c∈y∑P(xi,xj∣c)logP(xi∣c)P(xj∣c)P(xi,xj∣c - 以每个属性为节点,CMI为边形成一张图。找到这张图的最大带权生成树。即找到一个节点之间的连接规则,这个规则满足三个条件:
能够连接所有节点;是用最少数目的边;边长(CMI)总和最大 - 再把节点连接关系设置为有向,把最先出现的属性设置为根节点,再由根结点出发来确定边的方向
- 求 ∏ i = 1 d P ( x i ∣ c , p a i ) \prod_{i=1}^{d}P(x_i|c,pai) ∏i=1dP(xi∣c,pai)
优点&缺点
优点
- 朴素贝叶斯模型有稳定的分类效率。
- 对小规模的数据表现很好,能处理多分类任务,适合增量式训练,尤其是数据量超出内存时,可以一批批的去增量训练。
- 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
缺点 - 理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
- 需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
- 由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
- 对输入数据的表达形式很敏感。
参考
https://www.sohu.com/a/212745323_163476
https://blog.youkuaiyun.com/qq_32172681/article/details/101113646
#关于作者
知乎