《Approximating Discrete Probability Distributions with Dependence Trees》是一篇1968年的经典论文了,即使在2018年也有28次的引用量:

是由两位IEEE大牛C.K. CHOW和C.N.LIU所写,所以通常都被称为“Chow-Liu Tree”、“周刘树”、“CLT”,或者叫“依赖树”。整篇论文一共就6页,虽然是6页,刚开始看得真的头大,完全不知道在讲什么,更别说用了,百度一下啥都不知道,最后到外网才找到一些资料。我本科也是做这个相关的内容,当时连分类和分割的区别都不懂,也没有人讲解强行上手,真是被坑哭了。本科大四的时候每天早上起来就硬盯着一遍一遍地重复看,终于才慢慢理解。举个例子:
Abstract —— A method is presented to approximate optimally an n-dimensional discrete probability distribution by a product of second-order distributions, or the distribution of the first-order tree dependence.
什么叫做second-order distribution,翻译成英文就得花费几倍的时间从公式反推才知道这是指的“二维分布”或者叫“二阶分布”而不是在讲“第二个顺序的分布”。
CLT要解决的事情
对于很多模式识别、学习系统来说,一个很重要的事情就是根据有限的数据集来估计整体n维联合概率分布。举个例子,有两个特征(花颜色、叶子密度),采集了一些数据集:(红色、密)→ 果实好吃,(黄色,稀)→ 果实好吃……,那么我想知道当花是什么颜色、叶子是什么密度,果实会好吃,如果估计出整体的二维联合概率分布,把公式一套进去,就能知道好吃的概率多大了。根据文章《A class of nonlinear recognition procedures》我们将联合概率分布估计为: 
其中,

现在的问题就是要求得最佳的排列m=(1,2,3,4,5),使得整个的一阶二阶乘积估计最逼近整体联合概率分布
CLT将这个数学问题计算机化,把这个乘积式子按照如下规则转为了树:
- 每个变量
代表树的一个节点 - 如果有乘积项量
,则画一条从a指向b的箭头 - 如果有乘积项
,则没有从c节点出去的箭头
这样的依赖树有n-1条边,例如上述的依赖树应该画为:

寻找最优依赖树
我们设原始概率分布为

熵的值越小说明分布越接近,那么整个问题变为了:
给定一个n维概率分布
对于n个节点来说,一共可能产生
【定义一】对于变量
这是互信息的一个普遍定义,互信息值非负。然后CLT将这个互信息作为节点之间的权重赋予在每个分支上面。
【定义二】对于
很容易理解这就是一个贪心,详细的证明在原论文上给出了,我也推导过一次。
用这两个定义,通过一系列的变换,熵被变换为了: 
后两项是独立于依赖树的常量,因此要想使得分布越逼近,就要使得熵最小;要想使得熵最小,就要使得依赖树的权值和最大,也就是寻找一棵以互信息为权值、变量为节点的最大生成树作为依赖树。这就可以借鉴像Kruskal之类的最小生成树的算法了。
依赖树寻找实例
考虑如下二值四维联合概率分布:
| 0000 | 0.100 | 0.046 |
| 0001 | 0.100 | 0.046 |
| 0010 | 0.050 | 0.056 |
| 0011 | 0.050 | 0.056 |
| 0100 | 0.000 | 0.056 |
| 0101 | 0.000 | 0.056 |
| 0110 | 0.100 | 0.068 |
| 0111 | 0.050 | 0.068 |
| 1000 | 0.050 | 0.056 |
| 1001 | 0.100 | 0.056 |
| 1010 | 0.000 | 0.068 |
| 1011 | 0.000 | 0.068 |
| 1100 | 0.050 | 0.068 |
| 1101 | 0.050 | 0.068 |
| 1110 | 0.150 | 0.083 |
| 1111 | 0.150 | 0.083 |
例如第1行的含义是,
| 0 | 1 | 00 | 01 | 10 | 11 |
|---|---|---|---|---|---|
| 0.450 | 0.550 | - | - | - | |
| 0.450 | 0.550 | - | - | - | |
| - | - | 0.300 | 0.150 | 0.150 |
然后根据互信息公式计算互信息,例如: 
于是得到了:
| 互信息 | 值 |
|---|---|
| 0.079 | |
| 0.00005 | |
| 0.0051 | |
| 0.189 | |
| 0.0051 | |
| 0.0051 |
我们只需要选择4-1=3条边,就能把4个节点连起来了,按照从大到小排序(

于是整体分布可能被估计为:

得到如下三种方案的对比表:
| 0000 | 0.100 | 0.130 | 0.104 | 0.104 |
| 0001 | 0.100 | 0.104 | 0.130 | 0.130 |
| 0010 | 0.050 | 0.037 | 0.030 | 0.037 |
| 0011 | 0.050 | 0.030 | 0.037 | 0.030 |
| 0100 | 0.000 | 0.015 | 0.015 | 0.012 |
| 0101 | 0.000 | 0.012 | 0.012 | 0.015 |
| 0110 | 0.100 | 0.068 | 0.068 | 0.068 |
| 0111 | 0.050 | 0.054 | 0.055 | 0.055 |
| 1000 | 0.050 | 0.053 | 0.052 | 0.052 |
| 1001 | 0.100 | 0.064 | 0.065 | 0.065 |
| 1010 | 0.000 | 0.015 | 0.015 | 0.018 |
| 1011 | 0.000 | 0.018 | 0.019 | 0.015 |
| 1100 | 0.050 | 0.033 | 0.040 | 0.032 |
| 1101 | 0.050 | 0.040 | 0.032 | 0.040 |
| 1110 | 0.150 | 0.149 | 0.182 | 0.182 |
| 1111 | 0.150 | 0.178 | 0.146 | 0.146 |
三种方案的熵都是0.094,几乎接近于0,已经非常近似了。
边缘概率分布的近似
上面的例子先给出联合概率分布,再去求的边缘概率。实际中我们本来要求的就是联合概率分布,所以只能利用样本去近似边缘概率。很容易想到计数的方法:

在实际操作中还会遇到问题,那就是样本量为0的时候会发生除以0的情况,这时候需要预处理样本,所有取值样本数+1,这样不会影响整体分布,又避免了除以0的问题。我在另外的算法里看见过这种处理,因此沿用了过来。
模式识别实例
我们采集了19000张手写数字0-9图片,将其图像数据二值化,希望通过计算机模式识别输入图像输出数字到底是几:

一共有c=10个类别,假设用

那么就判别这个样本为第k个类别。问题的关键转变为求条件概率

也就是求在给定

整个流程就走通了。
NAFs如何结合CLT
先用CLT进行一次“粗分割”,确定大致边界,再利用NAFs去精细分割。



粤公网安备44030602007943号