前置知识:
贝叶斯公式:https://blog.csdn.net/qq_32172681/article/details/98032205
朴素贝叶斯算法:https://blog.csdn.net/qq_32172681/article/details/101112211
1.、半朴素贝叶斯的“半”
前面说到,朴素贝叶斯(NB)的‘朴素’就体现在它假设各属性之间没有相互依赖,可以简化贝叶斯公式中P(x|c)的计算。但事实上,属性直接完全没有依赖的情况是非常少的。如果简单粗暴用朴素贝叶斯建模,泛化能力和鲁棒性都难以达到令人满意。
这就可以引出主角半朴素贝叶斯了,它假定每个属性最多只依赖一个(或k个)其他属性。它考虑属性间的相互依赖,但假定依赖只有一个(ODE)或k个(kDE)其他属性。这就是半朴素贝叶斯的’半’所体现之处。半朴素贝叶斯分类器适当考虑一部分属性之间的相互依赖信息,从而既不需要进行联合概率计算,又不至于彻底忽略比较强的属性依赖关系。
"独依赖估计" (One-Dependent Estimator,简称ODE)是半朴素贝叶斯分类器最常用的一种策略。所谓"独依赖"就是假设每个属性在类别之外最多仅依赖于一个其他属性。
于是半朴素贝叶斯分类器的公式为:

其中
为属性
所依赖的属性,称为
的父属性。
问题的关键就转化为如何确定每个属性的父属性,不同的做法产生不同的独依赖分类器。
2、 常见的半朴素贝叶斯算法SPODE和TAN
SPODE算法:假设所有属性都依赖同一个属性,这个属性称为“超父”属性。
TAN算法:通过最大带权生成树算法确定属性之间的依赖关系,简单点说,就是每个属性找到跟自己最相关的属性,然后形成一个有向边(只能往一个方向)。
下面的图借自周志华老师西瓜书:

3、详解TAN算法
步骤如下:
(1)计算任意两个属性之间的条件互信息(CMI,即相互依赖程度)

(2)以每个属性为节点(nodenode),CMI为边(edgeedge)形成一张图。找到这张图的最大带权生成树。即找到一个节点之间的连接规则,这个规则满足三个条件:
- 能够连接所有节点;
- 使用最少数目的边;
- 边长(CMI)总和最大
(3)再把节点连接关系设置为有向,即从父节点指向子节点。在这里把最先出现的属性设置为根节点,再由根节点出发来确定边的方向。在代码中把第2步和第3步一起执行。
(4)求 ![]()
参考:http://www.luyixian.cn/news_show_3477.aspx

640

被折叠的 条评论
为什么被折叠?



