半朴素贝叶斯分类器
朴素贝叶斯采用了“属性条件独立性假设”,但这个假设的确是有些草率了。因为往往属性之间包含着各种依赖。于是,人们尝试对这个假设进行一定程度的放松,由此产生了“半朴素贝叶斯分类器”(semi-naive Bayes classifiers)的学习方法。
半朴素贝叶斯分类器的基本想法是适当考虑一部分属性间的相互依赖信息。独依赖估计(One-Dependent Estimator,简称ODE)是半朴素贝叶斯分类器最常用的一种策略。顾名思义,独依赖是假设每个属性在类别之外最多依赖一个其他属性,即
\[P(x|c_i)=\prod_{j=1}^d P(x_j|c_i,{\rm pa}_j).\]
其中,\({\rm pa}_j\)为属性\(x_i\)所依赖的属性,称为\(x_i\)的父属性。假设父属性\({\rm pa}_j\)已知,那么可以使用下面的公式估计\(P(x_j|c_i,{\rm pa}_j)\):
\[P(x_j|c_i,{\rm pa}_j)=\frac{P(x_j,c_i,{\rm pa}_j)}{P(c_i,{\rm pa}_j)}.\]
于是,问题的关键变成了如何确定每个属性的父属性。不同的做法产生了不同的独依赖分类器。
-
SPODE(Super-Parent ODE)假设所有的属性都依赖于同一个属性,称为超父。
-
TAN(Tree Augmented naive Bayes)则在最大带权生成树算法的基础上发展的一种方法。
-
AODE(Averaged ODE)是一种集成学习的方法,尝试将每个属性作为超父来构建SPODE,与随机森林的方法有所相似。
下面具体描述一下TAN。
TAN
TAN的实施步骤如下:
- 计算任意属性之间的条件互信息\[I(x_i,x_j|y)=\sum_{x_i,x_j;c_k\in Y}P(x_i,x_j|c_k)\log\frac{P(x_i,x_j|c_k)}{P(x_i|c_k)P(x_j|c_k)};\]
- 以属性为节点构建完全图,节点间的权重设为相应的互信息;
- 构建此完全图的最大带权生成树,挑选根变量,将边置为有向;
- 加入类别结点\(y\),增加从\(y\)到每个属性的有向边。
容易看出,条件互信息\(I(x_i,x_j|y)\)刻画了属性\(x_i\)和\(x_j\)在已知类别情况下的相关性。因此,通过最大生成树算法,TAN实际上仅保留了强相关属性之间的依赖性。
在这里,我们通过将属性条件独立性假设放松为独立依赖假设,获得了泛化性能的提升。那么如果更进一步,考虑属性间的高阶依赖,能否可以进一步提升泛化性能呢?也就是说,将\(P(x|c_i)=\prod_{j=1}^d P(x_j|c_i,{\rm pa}_j)\)中的\({\rm pa}_j\)扩展为包含\(k\)个属性的集合\({\rm\bf{pa}}_j\),从而将ODE拓展为\(k\)DE。需要注意的是,随着\(k\)的增加,准确地估计概率\(P(x_j|c_i,{\rm\bf{pa}_j})\)所需的训练样本数量将以指数级增加。因此,若训练数据非常充分,泛化性能有可能提升;但在有限样本的条件下,则会陷入估计高阶联合概率的泥沼。