关于数据压缩、信源编码、赫夫曼码的一些研究,以及由此引出对决策树模型的信息论本质的思考

1. 关于数据压缩

0x1:什么是数据压缩?为何要进行数据压缩?

从信息论的角度来看数据压缩,本质上就是经过寻找一种编码方案,在不损失或者尽可能少损失原始信源信号的前提下,将原始信源信号映射到另外一个D元码字空间上。html

在机器学习中,咱们常常讨论到的”模型训练“,其本质上就是在寻找一个”信源映射函数“,例如线性回归的回归参数,就是一种信源映射函数,能够将输入空间X,一一映射到Y空间,因此,获得了一组模型参数,本质上就是获得了一个信源映射函数,此后,就能够由模型参数代替原始的样本数据。web

回到信息论数据压缩的话题,信息论数据压缩讨论和定义的是:在信源映射函数中,应该将哪些码字分配给哪些信源,怎么分配是最优的,即节省传输开销的。算法

本文经过讨论信息压缩的基本临界值(即最短码字长度),从另外一个方面来看熵的定义和合理性。经过对数据源中最频繁出现的结果分配较短的描述,而对不常常出现的结果分配较长的描述,可达到压缩数据的目的。shell

0x2:关于压缩编码的几个例子

1. 信源编码的定义

数据压缩的的本质是找到一种高效的压缩编码方案,这小节咱们先定义一下信源编码的一些形式化定义与记号,而后一块儿来看几个关于压缩编码的例子。架构

关于随机变量X的信源编码C是从X的取值空间X到D*的一个映射,其中D*表示D元字母表D上有限长度的字符串所构成的集合,用C(x)表示x的码字并用 l(x) 表示C(x)的长度。框架

设随机变量X的几率密度函数为p(x),定义信源编码C(x)的指望长度L(C)(expected length)为机器学习

,其中l(x)表示对应于x的码字的长度函数

另外,不是通常性,能够假定D元字母表为D={0,1,....,D-1}性能

2. 等比例码字编码举例

所谓等比码字编码,就是指对信源里的全部信号都采用相同长度的码字,例如:学习

C(红)=00,C(蓝)=11,是X={红,蓝}关于字母表D={0,1}的一个信源编码。

3. 对非等概随机变量进行非等比例编码举例

设随机变量X的分布及其码字分配以下:

可知X的熵H(X) = 1/2 * 1 + 1/4 * 2 + 1/8 * 3 + 1/8 * 3 = 1.75比特。而指望长度L(C) = El(X) = 1.75比特。

这里,咱们看到一个指望长度正好等于其熵值的编码,仔细对比会发如今该编码方案下,熵的计算公式和指望长度的计算公式是彻底相同的。

另外,注意到这个编码方案是可逆的,任何一个比特序列均可以惟一地解码成关于X中的字符序列,例如,比特串010111100110解码后为134213。

4. 对等概随机变量机械能给你非等比例编码举例

继续沿着上面那个例子的讨论,假设此次随机变量是一个均匀分布,但此次不像第一个例子采用等比例编码,而是采用变长编码,以下:

正如前面的例子同样,该编码也是惟一可译的,但这种的编码方案的熵为log3 = 1.58比特,而编码的指望长度为1.66比特,即此时

为何会这样呢?发生了什么事呢?

简单的解释就是:这个例子中的编码方案不是最优的,之因此指望长度比熵要大,是由于使用了多余的码字来对信源信号进行编码。

5. 莫尔斯码

莫尔斯码是关于英文字母表的一个至关有效的编码方案。

  • 使用四个字符的字母表:点、划、字母间隔、单词间隔
  • 使用短序列表示频繁出现的字母(例如,用单个点表示E),而用长序列表示不常常出现的字母(例如,Q表示为”划,划,点,划”)

须要注意的是,对于四字符的字母表来讲,莫斯编码并不是最佳表示,由于依此方式,许多可能的码字未被使用(码字空间没有被充分利用,这和前一个例子犯了一样的错误)。

香农在1948年的开创性论文中解决了对英文字母最佳编码方案的搜索问题,该问题也与磁记录的编码问题有联系,其中不容许出现一些长串的0。

# relative links about this topic
http://xueshu.baidu.com/usercenter/paper/show?paperid=2c9070b5bd7f5b00847480d94c9cfd7a&site=xueshu_se
http://xueshu.baidu.com/usercenter/paper/show?paperid=cac5df4cbee54e31c90ef560bf806712&site=xueshu_se

Relevant Link: 

《信息论基础》阮吉寿著 - 第五章

 

2. 信源编码

这一节开始咱们讨论信源编码,逐步对编码的条件进行定义,设xn表示信源序列(x1,x2,....,xn)。C(x1)C(x2)....C(xn)表示相应码字的串联,咱们称之为编码C的扩展(extension)

0x1:非奇异编码

若是编码将X的取值空间中的每一个元素映射为D*中不一样的字符串,即

则称这个编码是非奇异的(nonsigular)

0x2:惟一可译码

若是一个编码的扩展编码是非奇异的,也即整个序列能够一一对应一个信源序列,则称该编码是惟一可译的(uniquely decodable)

惟一可译码的任一编码字符串只来源于惟一可能的信源字符串。尽管如此,仍然可能须要通观整个编码字符串,才能最终肯定信源字符串。有时甚至是第一个码字也一样。

能够看到,非奇异性虽然保证表示X的每一个码字值明确性。可是,若是咱们须要发送一段序列,就须要在两个码字之间添加一个特殊符号(例如“逗号”),才能够确保其可译性。但如此使用特殊的分割符号会下降编码的效率。

一个很天然的想法是,若是能利用码的自我间断性或即时码的思想,就能够同时兼顾效率与一一对应精确性这两个目的。这就是接下要来讨论的前缀码。

0x3:前缀码(prefix code)

若码中无任何码字是其余码字的前缀,则称该编码为前缀码(prefix code)即时码(instantaneous code)自我间断码

在前缀码中,每个码字什么时候结束能够瞬时判断出来,于是无需参考后面的码字就能够译出即时码,每一次bit进行一次码字表查表,当命中某个码字序列时当即中止,由于不可能存在该码字同时由是其余码字的前缀,所以能够100%判定该序列为某个肯定的码字。

所以,对即时码来说,一旦分配给字符xi的码字结束,无需再等待后面的码字,就能够当即译出字符xi

例如前面例子中的编码方案

这就是一个前缀码,若是获得一个二元串,010111100110,咱们可将其译码为,0,10,111,110,10。

0x4:信源编码各类编码之间的关系

关于信源编码的几种编码方式之间的关系图以下:

用一个具体的例子来讲明各个信源编码方案的区别,下表分别列举了在码字分配在各个编码方案中的状况。

  • 对于非奇异码,码串010可能对应3个信源序列:二、1四、31,所以,该编码不是惟一可译的。
  • 惟一可译码也不必定是要无前缀的。关于码的惟一可译性,Sardinas和Patterson已经设计出一个有效检验的方法,其主要步骤是造成全部码字的可能后缀集,同时系统地删除它们
  • 表中最后一个是即时码,全部码字中无一码字是其余任一码字的前缀

Relevant Link: 

《信息论基础》阮吉寿著 - 第五章

  

3. Kraft不等式

为了描述一个给定的信源,咱们的目标是构造指望长度最小的即时码。接下来最大的问题是,显然不可能将短的码字分配给全部的信源字符而扔保持是无前缀的,那应该是按照什么约束条件来寻找全部可能的码字分配方案呢,由于可能知足指望长度最小的码字分配方案并不惟一。Kraft不等式定义了这个约束条件。

0x1:Kraft不等式形式化定义

即时码的一组可能的码字长度知足以下不等式,即kraft不等式。

对于D元字母表上的即时码(前缀码),码字长度一定知足不等式

反之,若给定知足以上不等式的一组码字长度,则存在一个相应的即时码,其码字长度就是给定的长度。

考虑一个每一节点均含D个子节点的D叉树,

  • 树枝表明码字的一个字符,例如,源于根节点的D条树枝表明着码字的第一个字符的D个可能值
  • 树叶表明每一个码字,始于根节点的路径可描绘出码字中全部字符

从上图中能够看出,码字的前缀条件代表树中无一码字是其余任一码字的祖先。于是,在这样的编码树中,每一码字都去除了它的可能成为码字的全部后代。从建树过程上看,有点启发式优化的影子,后面咱们会讨论到,咱们最熟悉的决策树的建树过程,本质上就是一个前缀码的寻优与构建过程。

为码字集中最长码字长度,考虑在树中层的全部节点,可知其中有些是码字,有些是码字的后代,而另外的节点既不是码字,也不是码字的后代。

在树中层的码字拥有层中的个后代,全部这样的后代集不相交。并且,这些集合中的总节点数一定小于或等于。所以,对全部码字求和,则可得:

,这就是Kraft不等式。

反之,若给定任意一组知足Kraft不等式的码字长度,总能够构造出上图结构相似的编码树。将第一个深度为的节点(依字典序)标位码字1,同时除去树中属于它的全部后代。而后在剩余的节点中找出第一个深度为的节点,将其标为码字2,同时除去树中全部属于它的全部后代,等等,依次方法继续下去,便可构造出一个码字长度为的前缀码。

Relevant Link: 

《信息论基础》阮吉寿著 - 第五章

 

4. 最优码

0x1:最优码指望长度条件

Kraft不等式解决的是,定义出了前缀码必须知足的约束条件问题,知足前缀条件的任何一个码字集均知足Kraft不等式。

接下来考虑求解前缀码的最小指望长度问题,该问题等价于求解知足Kraft不等式的长度集合,使得它的指望长度不超过其余任何前缀码的指望长度。这是一个标准的最优化问题,在全部整数上,最小化

其约束条件为

利用拉格朗日(Lagrange)乘子法,将带约束的最小化问题转化为下式的最小化问题:

关于求微分,可得

令偏导数为0,得:

将此式代入约束条件中以求得合适的λ,可得,于是,即最优码长为

若能够取码字长度为非整数,则此时的指望码字长度为:

随机变量X的任一D元即时码的指望长度一定大于或等于熵,即

,当且仅当(即对全部的i,-logDpi为整数),等号成立。

对于某个n,若是几率分布的每个几率值均等于D-n,则称这个几率分布是D进制的(D-adic),所以,当且仅当X的分布是D进制的,上述定理等号成立。

0x2:最优码长的界

1. 最优码长界形式化定义

上一小节中,咱们讨论了最优码长指望,即最小化,其约束条件为整数且。咱们已经证实若码长选取

,有L = H。可是因为未必为整数,因此该式只是一个理论值。

为了能使该式具备实际意义,经过取整运算,就能够给出整数码字长度的分配

,其中表示向上取整。这组整数知足kraft不等式,由于

如此选取的码字长度知足

在上式中乘pi,而且关于 i 求和,可得:

上面讨论可总结为以下定理:

是关于信源分布p和一个D元字母表的一组最优码长,L*为最优码的相应指望长度(),则

上式代表,实际最优码长的指望比熵大,但不会超出1比特的附加位。这是因为最优码长的理论值并不是老是整数形成的

2. 多字符分组编码的最优码指望长度界

前面介绍了对码字的串联(编码的扩展),即经过对多字符进行分组能够减少信源序列的熵,进而减小最优码指望长度。

考虑一个序列发送系统,其中的序列都是来自于X的n个字符,假定序列中的字符是i.i.d.,服从p(x),此时可将这n个字符当作是字母表中的超字符。

定义Ln为每一个输入字符指望码字长度,设是与(x1,x2,....,xn)相应的二进制码字长度,则

将上一小节推导的界应用于此时的编码,有

因为X1,X2,...,Xn是i.i.d.,所以

带入上面不等式,同时两边同除以n,得:

所以,经过使用足够大的分组长度,能够得到一个编码,可使其每字符指望码长任意地接近熵。

即便随机过程不是i.i.d.的,对来自该随机过程的字符序列也能够做一样的讨论,此时仍然有:

将上式两边同除以n,且定义Ln为没字符指望描述长度,可得:

若是随机过程是平稳的,则,当n->∞时,每字符指望描述长度趋于该随机过程熵率H(X)。

该定理从另外一方面说明了熵率概念的必要性,熵率是最简洁描述随机过程所需的每字符指望比特数

0x3:非真实分布的指望码长和最优码长之间的距离度量

这里先解释一下什么是真实分布与非真实分布。

  • 真实分布:目标过程的真实几率分布,是永恒的真值,但也是咱们不可知的,但能够经过训练样本无限逼近(大数定律)。
  • 非真实分布:基于经过对真实过程的观测获得了组观测结果序列,并基于该观测结果生成对应的几率估计分布,这样获得的几率估计分布可能和真实分布之间存在必定的差距。

举一个具体的例子,咱们基于有标注训练样本训练一个线性回归模型,经过MSE获得了一个最优拟合模型,可是该线性模型并无彻底拟合,依然存在一个大于0的损失函数值。这个时候,咱们就称咱们获得的线性回归模型表明了一个非真实分布,而原始训练样本表明了真实分布(基于大数定律)。

理解了基本概念以后,如今让咱们抛开具体的算法形式场景,回到抽象思惟领域,思考一个问题。当面对的对象是非真实分布时,用于描述这个非真实分布的指望描述长度会变得怎样。

假定真实分布的几率密度函数是p(x),而非真实分布的几率密度函数是q(x),相应的码长为

下面将证实,因为不正确的分布所引发的指望描述长度的增长值等于相对熵D(p || q)。因而,D(p || q)能够具体解释为因为使用不正确的信息而引发的描述性复杂度的增长量

将非真实几率分布的码字编码定义为偏码(wrong word),码字长度分配为

关于p(x)的指望码长知足以下公式:

证实过程以下:

因而,若真实分布为p(x),而编码使用的是非真实分布q(x),则会致使指望描述长度增长D(p || q)

这个定理也从码长指望的角度解释了线性回归模型拟合偏差以及拟合模型和真实分布之间相关系数的关系等话题,关于这部分的讨论,能够参阅另外一篇文章

0x4:最优码搜索程序

前面两小节讨论的最优码指望长度条件的证实过程,其实也间接提供了寻求最优码的理论步骤:

  • 找到与X的分布最接近的D进制分布(在相对熵意义下),由该D进制分布可提供一组码字长度。
  • 选取首次达到的节点(按照Kraft不等式证实过程的方法),构造出该编码
  • 逐次进行,最终获得一个关于X的最优码

上述是一个理论上指导方法,要具体实现这个程序并不容易,由于要搜素出与X的分布最接近的D进制分布并不容易。

在后面的讨论中,咱们会进入到具体算法细节层面的讨论,分别介绍寻求最优码的次优程序,香农-费诺编码,以及赫夫曼编码。

Relevant Link: 

《信息论基础》阮吉寿著 - 第五章

  

5. 赫夫曼码

关于给定分布构造最优(最短时间望长度)前缀码,赫夫曼给出了一个简单的算法。咱们将证实,对于相同信源字母表的任意其余编码,不可能比赫夫曼法所构造出的编码具备更小的指望长度。

在开始具体的讨论前,咱们先经过对20问题游戏的讨论,来切入对赫夫曼码的讨论。 

0x1:赫夫曼码和20问题游戏的等价性讨论

1. 20问题游戏说明

假定要设计一套最有效的”是/否问答系统“,以便从目标群中识别出其中一个目标。假设目标的几率分布已知,那么是否能找到最有效的问题序列,保证该序列可以将一个目标从一群可能的目标中惟一地区分出来。

这类游戏在平常生活中很是常见,它就是咱们熟悉的决策树,经过不断进行二元提问,将输入逐步分类,最终落到某个具体的类型桶中。

2. 20问题抽象

首先,咱们要找的目标可能不止一种人,咱们将其设为X={X1,X2,....,Xn},Xi表明了咱们要找的某一种目标人群。设计整套提问序列,本质上就是寻找一个目标编码方案,将X中全部Xi都映射为一个对应的码字。

在提问过程当中,当前所要提出的问题仅依赖于前面提出的若干问题的答案而定,因为答案序列惟一肯定该目标,于是全部目标对应着不一样的答案序列,

而且,若是用0表示”是“,用1表示”否“,那么可得到目标集的一个二元码。该编码的指望长度便是提问方案所需的指望问题数。

反之,若给定目标集的一个二元编码,能够求得与该编码相对应的问题序列,使其指望问题数等于编码的指望码长,若是提问方案中的第一个问题是:”目标的对应码字的第一位是1吗?“

考虑下面这个虚构的例子:

一个随机变量X,其取值空间为X={1,2,3,4,5},对应的几率分别是{0.25,0.25,0.2,0.15,0.15}。

为得到X的一个最优二元码,须要将最长的码字分配给字符4和5。通常地,咱们能够将该编码构造称为其中的两个最长码字仅差最后一位有所不一样。

对于这样的编码,可将字符4和5组合成单个信源字符,其相应的几率值为0.3。按此思路继续下去,将两个最小几率的字符组合成一个字符,直至仅剩下一个字符为止,而后对字符进行码字分配,最终咱们获得以下表格:

对于上面的信源编码方案,对应的问题序列能够反推出来。

  • 第一个问题应该是”X等于2或3吗?“:由于只有2或3的码字第一位是1,对此问题的回答能够肯定码的第一位
  • 假定第一个问题的回答是”对“,那么下一个问题应该是”X=3吗?“:这能够肯定码的第二位 
  • 同时要注意,对于第二个问题,也能够是”X等于1或3吗?“,它独立于第一个问题:由此可肯定码的第二位

在最优的提问方案中,指望问题数EQ知足:

,这符合最优码指望长度界定理。

3. 加权码字的赫夫曼编码

最小化的赫夫曼算法其实对任意一组都成立的,而无需考虑的大小。此时,赫夫曼编码算法最小化的是码长加权和,而非平均码长。

4. 赫夫曼编码与”切片“问题(字母码)

咱们已经说明了信源编码与20问题游戏的等价性。对于给定的随机变量,最优问题序列对应于一个最优的信源编码。然而,由赫夫曼编码肯定的最优问题方案要求对于对于任一问题,存在某个集合,使该问题具备形式”X∈A吗?“。

接下来考虑一个带约束的20问题游戏,具体说就是,假定X={1,2,....,m}中的元素降序排列为,而且要求全部的提问只能是惟一形式”X>a吗?“,其中a是某个数。

由赫夫曼算法所构造出的赫夫曼编码能够不与切片集(形如{x:x<a}的集合)相对应。若是选取由赫夫曼编码所获得的码字长度(),而且用它们来分配字符到编码树上,使得每一个码长对应着编码树的一个层,在对应的层上,将首达节点处标识上对应的字符,由此方法可构造出另外一个最优码。

然而与赫夫曼编码不一样的是,该编码是一个切片码(slice code),这是由于与此最优码等价的最优问题方案中的每一个问题(对应该码的一位)将该树分裂成一系列 {x:x>a} 与 {x:x<a} 的集合形式。

上面说的有些抽象,仍是继续用前面的一个例子来讲明一下,对随机变量的赫夫曼编码方案以下

可知由赫夫曼编码程序所构造出的赫夫曼码并非切片码,但若使用由赫夫曼编码程序得到的码字长度,即{2,2,2,3,3},同时将相应码字分配给编码树中相应层的首达节点,就可获得随机变量的以下一组新的编码:

  • 1 -> 00
  • 2 -> 01
  • 3 -> 10
  • 4 -> 110
  • 5 -> 111

能够证实上述编码是个切片码,因为码字是按字母序排列的,故咱们将这类片断码称做字母码(alphabetic code)。

0x2:赫夫曼码的最优性讨论

1. 赫夫曼码最优性所具备的性质

利用概括法能够证实二元赫夫曼码是最优的,为了证实赫夫曼码的最优性,首先来证实特定最优码所具备的性质。

假定随机变量的几率分布依次排列为,当达到最小时,编码是最优的。

对任意一个分布,必然存在知足以下性质的一个最优即时码:

  • 其长度序列与按几率分布列排列的次序相反,即,若,则
  • 最长的两个码字具备相同长度。
  • 最长的两个码字仅在最后一位上有所差异,且对应于两个最小可能发生的字符。

用归谬法来证实二元赫夫曼码的最优性,证实须要的步骤是经过一些列的交换、修剪、重排过程。考虑一个最优码Cm,以及一个C'm(经过某种交换、修剪、重排)。

  • ,则。此时经过交换码字便可得此结论。

设C'm为将Cm中的码字 j 和 k 交换所获得的编码,则

 

由于,且因为Cm是最优的,可得,故必有。从而最优码自己Cm一定知足性质1。

  • 最长的两个码字具备相同的长度 

经过修建码字得到该结论,若是两个最长码字长度不一样,那么将较长码字的最后一位删除,它仍可保持前缀形式,但此时具备更短的指望码字长。所以,最长的两个码字长度一定相等。

下图展现了如何从任一编码方案,经过交换、修剪、重排过程。考虑一个最优码Cm

 

假定,a)给出可能的即时码,经过修剪无兄弟的分枝,可将原码改进为b),将编码树重排成如c)所示,使得从顶部到底部按照码字长度的递增排列。最后,交换几率匹配使得编码树的指望深度获得改进,如d)所示。

所以,任何一个最优码均可以经过重排和交换最终具备如d)所示的典则码形式。

至此,我已经证实:若,则存在长度列为的一个最优码,且码字仅最后一位有所区别。

综上,咱们能够到赫夫曼码最优定理,即,若是C*为赫夫曼码而C'是其余码,则 L(C*) <= L(C')。

针对二元字母表的状况,能够推广到D元字母表的情形,赫夫曼码算法的最优性也是成立的。

2. 最优赫夫曼码的迭代式构建过程

上一小节咱们讨论了赫夫曼码的性质引理,知足引理的最优码是存在的,咱们称这样的码为典则码(canonical code)。对于m元字母表上的几率密度函数,咱们定义其m-1元字母表上的赫夫曼合并(huffman reduction)为。用表示p'的最优码,而用表示p的典则最优码。

上图中,令,a)给出一个典则最优码。合并两个最小几率获得b)中的编码。按照降序方式重排几率值,获得c)所示的m-1个字符上的典则码。

通常地,若是从m-1个字符熵的几率分布p'的一个最优码出发,经过扩展对应于的码字,就能够得到m个字符熵的编码,且获得的新码是最优的。

值得注意的是,在每一步合并两个最小可能发生的字符时,赫夫曼编码是一个”贪婪“算法,前面的证实代表这样的局部最优性能够保证最终编码的全局最优性。

Relevant Link: 

《信息论基础》阮吉寿著 - 第五章

 

6. 赫夫曼码与香农码对比异同

0x1:赫夫曼码和香农码在单个码字长度上的长度对比

对于某个特定的字符,使用码长为的编码(称为香农码)可能比最优码更差。

例如,考虑一个由两个字符组成的信源,其中一个发生的几率为0.9999,而另外一个为0.0001。若使用码字长度,则意味着他们的码长分别为1比特和14比特。然而,用赫夫曼码程序能够很容易得出,这两个字符的最优码长都是1比特。

于是,在香浓编码中,不常常发生的字符的码字长度通常比最优码的码字更长。

可是最优码的码字长度老是小于等于吗?答案是否认的,考虑下面这个例子:

设随机变量X的分布为

赫夫曼编码程序产生的码字长度为(2,2,2,2)或(1,2,3,4),这两个码的指望码字长相同。对第二个编码,其第三个字母的长尾3,比大。

虽然总整体指望平均上,香农码和赫夫曼码都是符合上下界定理的,即。可是在单个码字上,由于几率分布不均的缘故,香农码中某个字符的码字长度可能小于最优(赫夫曼)编码中的相应字符的码字长。

同时这里例子也说明了,最优码的码字长集合并不惟一,可能存在1个以上的具备相同指望值的码长集。

0x2:香农码的竞争最优性

咱们已经证实了赫夫曼码是具备最小指望长度的最优码。可是,对于某个特定的信源序列来讲,赫夫曼码的性能如何呢?对于全部序列来讲,赫夫曼码都优于其余编码吗?

显然不是的,由于存在某些编码,它们分配较短的码字给不常常发生的信源字符,对于这些信源字符,这样的编码比赫夫曼码更好。之因此出现这个现象是由于,指望长度最优并不必定表明局部到处最优,这进一步致使指望长度最优并不必定是全局竞争性最强,由于竞争性是全部局部博弈的综合结果

在正式叙述竞争最优性问题以前,咱们经过一个具体的例子来引入话题,以便更好地理解这其中的博弈思惟。

1. 从一个即时码效率竞争零和游戏提及

有两个参与一个零和博弈游戏,给定给一个属于特定几率分布的信源字符序列,要求他们各自设计一个即时码。比赛的规则是:对此信源字符,若是参赛者A设计的码字比参赛者B设计的短或长,则A相应的得分是1或-1,若平手,则A得分为0。

从博弈论的角度来看,这是一个田忌赛马问题,即对于A来讲,他可能从总体指望上弱于B,但A能够充分利用单轮博弈这个优点,在尽可能多的轮次中,分配稍微强于B的码字上场进行博弈,而在余下的少许轮次中,用大幅度弱于B的码字去惨输,这样,从总体上看,比赛的最终结果仍是A胜。这种策略的思想是:集中优点力量赢得尽可能多的局部战役,而在不重要的少许局部战役中几乎不投或者投入不多的资源,从而博取全局的整体胜势。

2. 香农码单个码字长度的界

香农码每一个码字长度,这里设表示其余惟一可译码的相应码字长度,则有:

例如,短5比特或更多的几率不超过1/16。

证实过程以下:

上面证实过程的最后一步,由Kraft不等式获得

所以,在大多数状况下,没有其余码可以比香农码更为优越。可是上述过程其实是证实了下界,事件成立的几率>= 1/2只是一个下界证实,即证实了最坏状况下,香农码也不会坏到哪里去。

但这是不够的,在博弈论架构中,人们一般但愿证实,下面咱们来证实这个更为严格的判断准则下,香农码也是最优的。

若是几率密度函数p(x)是二进制的,则均为整数。有以下定理:

对二进制几率密度函数p(x),设为信源的二元香农码的码字长度,为信源任何其余惟一可译二元码的码字长度,则:

,当且仅当对全部的x,都有时,等号成立。因而,码长分配惟一竞争最优的

证实过程以下:

定义阶跃函数sgn(t)以下:

引入一个新的函数,以下图所示:

由上图可知,,对于,即仅对于全部整数成立,但对全部实值不成立。此时能够获得:

其中

  • (a)是由sgn(x)的上界获得
  • (b)是因为知足Kraft不等式获得

由此,咱们证实了在某类判别准则下,香农码是竞争最优的。

Relevant Link: 

《信息论基础》阮吉寿著 - 第五章

  

7. Shannon-Fano-Elias编码

0x1:基于累计几率分布的编码映射方案形式化定义

在本节中,咱们介绍一个简单的惟一可译码狗仔程序,基本思路是利用累计分布函数来分配码字。

不失通常性,假定取,假设对全部的x,有p(x)>0,定义累计分布函数F(x)为:

考虑修正的累计分布函数:

其函数图以下图所示:

其中,表示小于x的全部字符的几率和加上字符x几率的一半所获得的值。因为随机变量是离散的(信源是离散的),故累计分布函数所含的阶梯高度为p(x),函数的值正好是与x对应的那个阶梯的中点。

  • 因为全部的几率值是正的,若,则
  • 若已知,则能够肯定x。

所以,只需经过观察累计分布函数的图形,就能够找到相应的x,故能够做为x的编码(本质上就是一种编码映射函数)。这符合编码的奇异性和惟一可译性。

可是,根据离散几率分布函数的性质,咱们知道,须要无限多的比特才能表示实数,由于不可能彻底相等而只能无限逼近。因此,使用的精确值做为对x的编码不可行,转而必须使用近似值来进行编码,因此接下来的问题就是,这个近似值须要精确到什么程度呢?

假定将舍入取位,记为,因而,取的前位做为x的码,由舍入定义,可得:

若:,则

于是,位于对应x的阶梯之中,那么,使用比特足以表示x。

除了证实了码字与字符一一对应以外,还须要证实码字集是无前缀的。

考虑每一个码字,注意到它实际上表明的不是一个点,而是一个几率区间,码是无前缀的当且仅当码字对应的区间互不相交。这能够由累计几率分布函数的性质来保证。

最后,因为使用比特来表示x,则编码的指望长度为:

所以,该编码方案的指望码长不会超过熵值2比特。

0x2:Shannon-Fano-Elias编码举例说明

首先考虑下面的例子,其中全部几率值都是二进制的,码的构造以下表:

在此情形下,指望码长尾2.75比特,而熵为1.75比特。

注意表格中的码字,显然存在着某些无效性,若是最后两个码字的最后一位删除,那么获得的码就再也不是无前缀的了。

如今看Shannon-Fano-Elias码的另外一个例子,在该例中,因为分布不是二进制的,因此F(x)的二进制表示可能有无穷位数字,用近似值来代替。

上述编码的平均长度比该信源赫夫曼码的长度大12比特。

Relevant Link: 

《信息论基础》阮吉寿著 - 第五章

  

8. 决策树(ID三、C4.5)算法的赫夫曼编码本质

0x1:决策树模型和赫夫曼码的一一对应关系

决策树的建树过程咱们很是熟悉,它是一种层次迭代树结构模型,从根节点开始,每次根据熵增益选择一个最优的特征做为分裂节点,直到将全部样本都分配到某个叶节点上。

这里咱们用信息论中赫夫曼码的理论框架,来从新看一下决策树的建树逻辑。

  • 决策树面对的样本特征,能够理解为一组信源信号X,信源信号X的元素个数为特征个数。决策树要创建的树结构本质,就是须要决定,哪些特征放前面,哪些特征放后面,即如何进行序列编码。
  • 决策树从根节点开始,逐层递进,直到将全部样本分配到某个叶节点上,这是在寻找一个赫夫曼编码序列,将全部信源信号进行编码。
  • 决策树在每层都寻找当前能带来最大熵增益的特征属性,这里隐含了一个信息,实际上,决策树是根据各个特征属性的几率大小进行了一次从大到小的排序,而后在每一层逐个取当前几率最大的特征属性做为分裂点(split point),这是一种字母码的赫夫曼码的构建过程。

0x2:从赫夫曼码视角看决策树的优缺点

从上述讨论能够看到,决策树模型的本质就是一个赫夫曼码编码方案,所以,咱们能够借助赫夫曼码的定理和引理来看决策树的算法优缺点。

1. 决策树的优势

由于决策树的建树过程,符合赫夫曼码的贪婪搜索算法,每一次都是局部最优的,且全局也是最优的。因此,决策树的树结构表明了对数据特征的一种最短编码

怎么理解这句话呢?简单来讲,决策树能保证在用最短的步骤将数据映射为一个具体类型,即从一个信源编码为一个序列信号。再通俗一点说就是,将一个数据X映射为一个具体的Y。在具体的分类或者回归任务中,Y指的就是离散类型或者回归值。

2. 决策树的缺点

成也萧何败萧何,基于赫夫曼码的坚实理论,决策树得到了高效的信源信号描述能力的同时,也一样面临着赫夫曼码的缺点,这是熵自己性质带来的。

这就是咱们前面说的,这就是像香农码/赫夫曼码这种熵码,对大量的小几率事件,不能及时中止,而会不断地给其分配新的码字,这样的后果就是,当数据集特征中,有大量的小几率特征,决策树的深度会变得很深,最终致使过拟合。

这样说有些抽象,咱们虚构一个例子来讲明。

假设如今有一个数据集,咱们已经完成了特征工程,准备训练一个决策树模型,如今数据集各个特征各自的几率分布为,X={1/4,1/4,1/16,1/32,....,1/32}。

能够看到,前两个特征是高几率信源信号,咱们将最短的2个码字分配给它们,这没有问题,可是接下来,剩余的特征单个的几率都很低,并且数量很大,按照赫夫曼码的构建过程,会按照几率的顺序逐个分配其递增加度的码字,能够很容易想象,若是数据特征的几率分布越分散(小几率特征越多),最后获得的赫夫曼码指望长度就会越长。

接下来,还得再说明一个问题,为何说码长越长,越容易引发过拟合呢?反正我都是按照赫夫曼编码理论获得的最优码,你管我长仍是短。

问题的根源出在数据上,咱们知道,数据中除了蕴含有用的信息以外,还存在着大量的噪声数据,包括:

  • 系统噪声:目标事物自己就存在某种不肯定性,例如该特征和目标值之间根本就不存在相关关系
  • 采样噪声:数据采集过程当中引入的噪声

这些噪声的存在,最终致使了样本特征中出现大量小几率特征。这些包含噪声的小几率特征,在建模过程当中是须要进行剔除的,不该该被归入到编码范畴内。 

从上述讨论中咱们还获得一个工程实践上的启发,在作特征工程的时候,不要一味地贪多,认为特征越多越好,反正无论三七二十一,一顿操做,各类想获得的特征都给你提出来,让后一股脑丢给机器学习算法,心想,反正个人工做就是提特征,至于哪些特征有用,哪些特征没用,是你算法模型要决定的事情,我只管给模型喂海量高质量的数据就能够了。

这种作法在实践中固然大几率也不会遇到很大的问题,可是咱们得知道其中缘由,这是由于模型经过剪枝、dropout、正则化等手段进行了提早中止,必定程度上破坏了原始的赫夫曼码的构建过程,提早终止了树的继续增加,这才致使了过拟合的发生。

Relevant Link: 

https://www.cnblogs.com/LittleHann/p/7309511.html#_lab2_4_0

 

9. TODO

目前还没法完全思考的问题,留待之后继续深刻研究 

  • 蒙特卡洛搜索中蕴含的熵思想 
  • 怎么样从理论上定量分析一个问题域的熵,例如webshell恶意文件检测,将恶意文件的文本表征看作随机变量,怎么衡量其熵值。
相关文章
相关标签/搜索