朴素贝叶斯采用了“属性条件独立性假设”,但这个假设的确是有些草率了。由于每每属性之间包含着各类依赖。因而,人们尝试对这个假设进行必定程度的放松,由此产生了“半朴素贝叶斯分类器”(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)\):spa
\[P(x_j|c_i,{\rm pa}_j)=\frac{P(x_j,c_i,{\rm pa}_j)}{P(c_i,{\rm pa}_j)}.\]class
因而,问题的关键变成了如何肯定每一个属性的父属性。不一样的作法产生了不一样的独依赖分类器。基础
SPODE(Super-Parent ODE)假设全部的属性都依赖于同一个属性,称为超父。学习方法
TAN(Tree Augmented naive Bayes)则在最大带权生成树算法的基础上发展的一种方法。变量
AODE(Averaged ODE)是一种集成学习的方法,尝试将每一个属性做为超父来构建SPODE,与随机森林的方法有所类似。扩展
下面具体描述一下TAN。方法
TAN的实施步骤以下:
容易看出,条件互信息\(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})\)所需的训练样本数量将以指数级增长。所以,若训练数据很是充分,泛化性能有可能提高;但在有限样本的条件下,则会陷入估计高阶联合几率的泥沼。