从信息论的角度来看数据压缩,本质上就是经过寻找一种编码方案,在不损失或者尽可能少损失原始信源信号的前提下,将原始信源信号映射到另外一个D元码字空间上。html
在机器学习中,咱们常常讨论到的”模型训练“,其本质上就是在寻找一个”信源映射函数“,例如线性回归的回归参数,就是一种信源映射函数,能够将输入空间X,一一映射到Y空间,因此,获得了一组模型参数,本质上就是获得了一个信源映射函数,此后,就能够由模型参数代替原始的样本数据。web
回到信息论数据压缩的话题,信息论数据压缩讨论和定义的是:在信源映射函数中,应该将哪些码字分配给哪些信源,怎么分配是最优的,即节省传输开销的。算法
本文经过讨论信息压缩的基本临界值(即最短码字长度),从另外一个方面来看熵的定义和合理性。经过对数据源中最频繁出现的结果分配较短的描述,而对不常常出现的结果分配较长的描述,可达到压缩数据的目的。shell
数据压缩的的本质是找到一种高效的压缩编码方案,这小节咱们先定义一下信源编码的一些形式化定义与记号,而后一块儿来看几个关于压缩编码的例子。架构
关于随机变量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}性能
所谓等比码字编码,就是指对信源里的全部信号都采用相同长度的码字,例如:学习
C(红)=00,C(蓝)=11,是X={红,蓝}关于字母表D={0,1}的一个信源编码。
设随机变量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。
继续沿着上面那个例子的讨论,假设此次随机变量是一个均匀分布,但此次不像第一个例子采用等比例编码,而是采用变长编码,以下:
正如前面的例子同样,该编码也是惟一可译的,但这种的编码方案的熵为log3 = 1.58比特,而编码的指望长度为1.66比特,即此时。
为何会这样呢?发生了什么事呢?
简单的解释就是:这个例子中的编码方案不是最优的,之因此指望长度比熵要大,是由于使用了多余的码字来对信源信号进行编码。
莫尔斯码是关于英文字母表的一个至关有效的编码方案。
须要注意的是,对于四字符的字母表来讲,莫斯编码并不是最佳表示,由于依此方式,许多可能的码字未被使用(码字空间没有被充分利用,这和前一个例子犯了一样的错误)。
香农在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:
《信息论基础》阮吉寿著 - 第五章
这一节开始咱们讨论信源编码,逐步对编码的条件进行定义,设xn表示信源序列(x1,x2,....,xn)。C(x1)C(x2)....C(xn)表示相应码字的串联,咱们称之为编码C的扩展(extension)
若是编码将X的取值空间中的每一个元素映射为D*中不一样的字符串,即
则称这个编码是非奇异的(nonsigular)。
若是一个编码的扩展编码是非奇异的,也即整个序列能够一一对应一个信源序列,则称该编码是惟一可译的(uniquely decodable)。
惟一可译码的任一编码字符串只来源于惟一可能的信源字符串。尽管如此,仍然可能须要通观整个编码字符串,才能最终肯定信源字符串。有时甚至是第一个码字也一样。
能够看到,非奇异性虽然保证表示X的每一个码字值明确性。可是,若是咱们须要发送一段序列,就须要在两个码字之间添加一个特殊符号(例如“逗号”),才能够确保其可译性。但如此使用特殊的分割符号会下降编码的效率。
一个很天然的想法是,若是能利用码的自我间断性或即时码的思想,就能够同时兼顾效率与一一对应精确性这两个目的。这就是接下要来讨论的前缀码。
若码中无任何码字是其余码字的前缀,则称该编码为前缀码(prefix code)或即时码(instantaneous code)或自我间断码。
在前缀码中,每个码字什么时候结束能够瞬时判断出来,于是无需参考后面的码字就能够译出即时码,每一次bit进行一次码字表查表,当命中某个码字序列时当即中止,由于不可能存在该码字同时由是其余码字的前缀,所以能够100%判定该序列为某个肯定的码字。
所以,对即时码来说,一旦分配给字符xi的码字结束,无需再等待后面的码字,就能够当即译出字符xi。
例如前面例子中的编码方案
这就是一个前缀码,若是获得一个二元串,010111100110,咱们可将其译码为,0,10,111,110,10。
关于信源编码的几种编码方式之间的关系图以下:
用一个具体的例子来讲明各个信源编码方案的区别,下表分别列举了在码字分配在各个编码方案中的状况。
Relevant Link:
《信息论基础》阮吉寿著 - 第五章
为了描述一个给定的信源,咱们的目标是构造指望长度最小的即时码。接下来最大的问题是,显然不可能将短的码字分配给全部的信源字符而扔保持是无前缀的,那应该是按照什么约束条件来寻找全部可能的码字分配方案呢,由于可能知足指望长度最小的码字分配方案并不惟一。Kraft不等式定义了这个约束条件。
即时码的一组可能的码字长度知足以下不等式,即kraft不等式。
对于D元字母表上的即时码(前缀码),码字长度一定知足不等式
反之,若给定知足以上不等式的一组码字长度,则存在一个相应的即时码,其码字长度就是给定的长度。
考虑一个每一节点均含D个子节点的D叉树,
从上图中能够看出,码字的前缀条件代表树中无一码字是其余任一码字的祖先。于是,在这样的编码树中,每一码字都去除了它的可能成为码字的全部后代。从建树过程上看,有点启发式优化的影子,后面咱们会讨论到,咱们最熟悉的决策树的建树过程,本质上就是一个前缀码的寻优与构建过程。
令为码字集中最长码字长度,考虑在树中
层的全部节点,可知其中有些是码字,有些是码字的后代,而另外的节点既不是码字,也不是码字的后代。
在树中层的码字拥有
层中的
个后代,全部这样的后代集不相交。并且,这些集合中的总节点数一定小于或等于
。所以,对全部码字求和,则可得:
或
,这就是Kraft不等式。
反之,若给定任意一组知足Kraft不等式的码字长度,总能够构造出上图结构相似的编码树。将第一个深度为
的节点(依字典序)标位码字1,同时除去树中属于它的全部后代。而后在剩余的节点中找出第一个深度为
的节点,将其标为码字2,同时除去树中全部属于它的全部后代,等等,依次方法继续下去,便可构造出一个码字长度为
的前缀码。
Relevant Link:
《信息论基础》阮吉寿著 - 第五章
Kraft不等式解决的是,定义出了前缀码必须知足的约束条件问题,知足前缀条件的任何一个码字集均知足Kraft不等式。
接下来考虑求解前缀码的最小指望长度问题,该问题等价于求解知足Kraft不等式的长度集合,使得它的指望长度
不超过其余任何前缀码的指望长度。这是一个标准的最优化问题,在全部整数
上,最小化
其约束条件为
利用拉格朗日(Lagrange)乘子法,将带约束的最小化问题转化为下式的最小化问题:
关于求微分,可得
令偏导数为0,得:
将此式代入约束条件中以求得合适的λ,可得,于是
,即最优码长为
。
若能够取码字长度为非整数,则此时的指望码字长度为:
随机变量X的任一D元即时码的指望长度一定大于或等于熵,即
,当且仅当
(即对全部的i,-logDpi为整数),等号成立。
对于某个n,若是几率分布的每个几率值均等于D-n,则称这个几率分布是D进制的(D-adic),所以,当且仅当X的分布是D进制的,上述定理等号成立。
上一小节中,咱们讨论了最优码长指望,即最小化,其约束条件为
整数且
。咱们已经证实若码长选取
,有L = H。可是因为
未必为整数,因此该式只是一个理论值。
为了能使该式具备实际意义,经过取整运算,就能够给出整数码字长度的分配
,其中
表示向上取整。这组整数知足kraft不等式,由于
如此选取的码字长度知足
在上式中乘pi,而且关于 i 求和,可得:
上面讨论可总结为以下定理:
设是关于信源分布p和一个D元字母表的一组最优码长,L*为最优码的相应指望长度(
),则
上式代表,实际最优码长的指望比熵大,但不会超出1比特的附加位。这是因为最优码长的理论值并不是老是整数形成的。
前面介绍了对码字的串联(编码的扩展),即经过对多字符进行分组能够减少信源序列的熵,进而减小最优码指望长度。
考虑一个序列发送系统,其中的序列都是来自于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)。
该定理从另外一方面说明了熵率概念的必要性,熵率是最简洁描述随机过程所需的每字符指望比特数。
这里先解释一下什么是真实分布与非真实分布。
举一个具体的例子,咱们基于有标注训练样本训练一个线性回归模型,经过MSE获得了一个最优拟合模型,可是该线性模型并无彻底拟合,依然存在一个大于0的损失函数值。这个时候,咱们就称咱们获得的线性回归模型表明了一个非真实分布,而原始训练样本表明了真实分布(基于大数定律)。
理解了基本概念以后,如今让咱们抛开具体的算法形式场景,回到抽象思惟领域,思考一个问题。当面对的对象是非真实分布时,用于描述这个非真实分布的指望描述长度会变得怎样。
假定真实分布的几率密度函数是p(x),而非真实分布的几率密度函数是q(x),相应的码长为
下面将证实,因为不正确的分布所引发的指望描述长度的增长值等于相对熵D(p || q)。因而,D(p || q)能够具体解释为因为使用不正确的信息而引发的描述性复杂度的增长量。
将非真实几率分布的码字编码定义为偏码(wrong word),码字长度分配为
关于p(x)的指望码长知足以下公式:
证实过程以下:
因而,若真实分布为p(x),而编码使用的是非真实分布q(x),则会致使指望描述长度增长D(p || q)。
这个定理也从码长指望的角度解释了线性回归模型拟合偏差以及拟合模型和真实分布之间相关系数的关系等话题,关于这部分的讨论,能够参阅另外一篇文章。
前面两小节讨论的最优码指望长度条件的证实过程,其实也间接提供了寻求最优码的理论步骤:
上述是一个理论上指导方法,要具体实现这个程序并不容易,由于要搜素出与X的分布最接近的D进制分布并不容易。
在后面的讨论中,咱们会进入到具体算法细节层面的讨论,分别介绍寻求最优码的次优程序,香农-费诺编码,以及赫夫曼编码。
Relevant Link:
《信息论基础》阮吉寿著 - 第五章
关于给定分布构造最优(最短时间望长度)前缀码,赫夫曼给出了一个简单的算法。咱们将证实,对于相同信源字母表的任意其余编码,不可能比赫夫曼法所构造出的编码具备更小的指望长度。
在开始具体的讨论前,咱们先经过对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。按此思路继续下去,将两个最小几率的字符组合成一个字符,直至仅剩下一个字符为止,而后对字符进行码字分配,最终咱们获得以下表格:
对于上面的信源编码方案,对应的问题序列能够反推出来。
在最优的提问方案中,指望问题数EQ知足:
,这符合最优码指望长度界定理。
最小化的赫夫曼算法其实对任意一组
都成立的,而无需考虑
的大小。此时,赫夫曼编码算法最小化的是码长加权和
,而非平均码长。
咱们已经说明了信源编码与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},同时将相应码字分配给编码树中相应层的首达节点,就可获得随机变量的以下一组新的编码:
能够证实上述编码是个切片码,因为码字是按字母序排列的,故咱们将这类片断码称做字母码(alphabetic code)。
利用概括法能够证实二元赫夫曼码是最优的,为了证实赫夫曼码的最优性,首先来证实特定最优码所具备的性质。
假定随机变量的几率分布依次排列为,当
达到最小时,编码是最优的。
对任意一个分布,必然存在知足以下性质的一个最优即时码:
用归谬法来证实二元赫夫曼码的最优性,证实须要的步骤是经过一些列的交换、修剪、重排过程。考虑一个最优码Cm,以及一个C'm(经过某种交换、修剪、重排)。
设C'm为将Cm中的码字 j 和 k 交换所获得的编码,则
由于,且因为Cm是最优的,可得
,故必有
。从而最优码自己Cm一定知足性质1。
经过修建码字得到该结论,若是两个最长码字长度不一样,那么将较长码字的最后一位删除,它仍可保持前缀形式,但此时具备更短的指望码字长。所以,最长的两个码字长度一定相等。
下图展现了如何从任一编码方案,经过交换、修剪、重排过程。考虑一个最优码Cm。
假定,a)给出可能的即时码,经过修剪无兄弟的分枝,可将原码改进为b),将编码树重排成如c)所示,使得从顶部到底部按照码字长度的递增排列。最后,交换几率匹配使得编码树的指望深度获得改进,如d)所示。
所以,任何一个最优码均可以经过重排和交换最终具备如d)所示的典则码形式。
至此,我已经证实:若,则存在长度列为
的一个最优码,且码字
和
仅最后一位有所区别。
综上,咱们能够到赫夫曼码最优定理,即,若是C*为赫夫曼码而C'是其余码,则 L(C*) <= L(C')。
针对二元字母表的状况,能够推广到D元字母表的情形,赫夫曼码算法的最优性也是成立的。
上一小节咱们讨论了赫夫曼码的性质引理,知足引理的最优码是存在的,咱们称这样的码为典则码(canonical code)。对于m元字母表上的几率密度函数,咱们定义其m-1元字母表上的赫夫曼合并(huffman reduction)为
。用
表示p'的最优码,而用
表示p的典则最优码。
上图中,令,a)给出一个典则最优码。合并两个最小几率获得b)中的编码。按照降序方式重排几率值,获得c)所示的m-1个字符上的典则码。
通常地,若是从m-1个字符熵的几率分布p'的一个最优码出发,经过扩展对应于的码字,就能够得到m个字符熵的编码,且获得的新码是最优的。
值得注意的是,在每一步合并两个最小可能发生的字符时,赫夫曼编码是一个”贪婪“算法,前面的证实代表这样的局部最优性能够保证最终编码的全局最优性。
Relevant Link:
《信息论基础》阮吉寿著 - 第五章
对于某个特定的字符,使用码长为的编码(称为香农码)可能比最优码更差。
例如,考虑一个由两个字符组成的信源,其中一个发生的几率为0.9999,而另外一个为0.0001。若使用码字长度,则意味着他们的码长分别为1比特和14比特。然而,用赫夫曼码程序能够很容易得出,这两个字符的最优码长都是1比特。
于是,在香浓编码中,不常常发生的字符的码字长度通常比最优码的码字更长。
可是最优码的码字长度老是小于等于吗?答案是否认的,考虑下面这个例子:
设随机变量X的分布为
赫夫曼编码程序产生的码字长度为(2,2,2,2)或(1,2,3,4),这两个码的指望码字长相同。对第二个编码,其第三个字母的长尾3,比大。
虽然总整体指望平均上,香农码和赫夫曼码都是符合上下界定理的,即。可是在单个码字上,由于几率分布不均的缘故,香农码中某个字符的码字长度可能小于最优(赫夫曼)编码中的相应字符的码字长。
同时这里例子也说明了,最优码的码字长集合并不惟一,可能存在1个以上的具备相同指望值的码长集。
咱们已经证实了赫夫曼码是具备最小指望长度的最优码。可是,对于某个特定的信源序列来讲,赫夫曼码的性能如何呢?对于全部序列来讲,赫夫曼码都优于其余编码吗?
显然不是的,由于存在某些编码,它们分配较短的码字给不常常发生的信源字符,对于这些信源字符,这样的编码比赫夫曼码更好。之因此出现这个现象是由于,指望长度最优并不必定表明局部到处最优,这进一步致使指望长度最优并不必定是全局竞争性最强,由于竞争性是全部局部博弈的综合结果。
在正式叙述竞争最优性问题以前,咱们经过一个具体的例子来引入话题,以便更好地理解这其中的博弈思惟。
有两个参与一个零和博弈游戏,给定给一个属于特定几率分布的信源字符序列,要求他们各自设计一个即时码。比赛的规则是:对此信源字符,若是参赛者A设计的码字比参赛者B设计的短或长,则A相应的得分是1或-1,若平手,则A得分为0。
从博弈论的角度来看,这是一个田忌赛马问题,即对于A来讲,他可能从总体指望上弱于B,但A能够充分利用单轮博弈这个优点,在尽可能多的轮次中,分配稍微强于B的码字上场进行博弈,而在余下的少许轮次中,用大幅度弱于B的码字去惨输,这样,从总体上看,比赛的最终结果仍是A胜。这种策略的思想是:集中优点力量赢得尽可能多的局部战役,而在不重要的少许局部战役中几乎不投或者投入不多的资源,从而博取全局的整体胜势。
香农码每一个码字长度,这里设
表示其余惟一可译码的相应码字长度,则有:
例如,比
短5比特或更多的几率不超过1/16。
证实过程以下:
上面证实过程的最后一步,由Kraft不等式获得。
所以,在大多数状况下,没有其余码可以比香农码更为优越。可是上述过程其实是证实了下界,事件成立的几率>= 1/2只是一个下界证实,即证实了最坏状况下,香农码也不会坏到哪里去。
但这是不够的,在博弈论架构中,人们一般但愿证实,下面咱们来证实这个更为严格的判断准则下,香农码也是最优的。
若是几率密度函数p(x)是二进制的,则均为整数。有以下定理:
对二进制几率密度函数p(x),设为信源的二元香农码的码字长度,
为信源任何其余惟一可译二元码的码字长度,则:
,当且仅当对全部的x,都有
时,等号成立。因而,码长分配
是惟一竞争最优的。
证实过程以下:
定义阶跃函数sgn(t)以下:
引入一个新的函数,以下图所示:
由上图可知,,对于
,即仅对于全部整数成立,但对全部实值不成立。此时能够获得:
其中
由此,咱们证实了在某类判别准则下,香农码是竞争最优的。
Relevant Link:
《信息论基础》阮吉寿著 - 第五章
在本节中,咱们介绍一个简单的惟一可译码狗仔程序,基本思路是利用累计分布函数来分配码字。
不失通常性,假定取,假设对全部的x,有p(x)>0,定义累计分布函数F(x)为:
考虑修正的累计分布函数:
其函数图以下图所示:
其中,表示小于x的全部字符的几率和加上字符x几率的一半所获得的值。因为随机变量是离散的(信源是离散的),故累计分布函数所含的阶梯高度为p(x),函数
的值正好是与x对应的那个阶梯的中点。
所以,只需经过观察累计分布函数的图形,就能够找到相应的x,故能够做为x的编码(本质上就是一种编码映射函数)。这符合编码的奇异性和惟一可译性。
可是,根据离散几率分布函数的性质,咱们知道,须要无限多的比特才能表示实数,由于
不可能彻底相等而只能无限逼近。因此,使用
的精确值做为对x的编码不可行,转而必须使用近似值来进行编码,因此接下来的问题就是,这个近似值须要精确到什么程度呢?
假定将舍入取
位,记为
,因而,取
的前
位做为x的码,由舍入定义,可得:
若:,则
。
于是,位于对应x的阶梯之中,那么,使用
比特足以表示x。
除了证实了码字与字符一一对应以外,还须要证实码字集是无前缀的。
考虑每一个码字,注意到它实际上表明的不是一个点,而是一个几率区间
,码是无前缀的当且仅当码字对应的区间互不相交。这能够由累计几率分布函数的性质来保证。
最后,因为使用比特来表示x,则编码的指望长度为:
所以,该编码方案的指望码长不会超过熵值2比特。
首先考虑下面的例子,其中全部几率值都是二进制的,码的构造以下表:
在此情形下,指望码长尾2.75比特,而熵为1.75比特。
注意表格中的码字,显然存在着某些无效性,若是最后两个码字的最后一位删除,那么获得的码就再也不是无前缀的了。
如今看Shannon-Fano-Elias码的另外一个例子,在该例中,因为分布不是二进制的,因此F(x)的二进制表示可能有无穷位数字,用近似值来代替。
上述编码的平均长度比该信源赫夫曼码的长度大12比特。
Relevant Link:
《信息论基础》阮吉寿著 - 第五章
决策树的建树过程咱们很是熟悉,它是一种层次迭代树结构模型,从根节点开始,每次根据熵增益选择一个最优的特征做为分裂节点,直到将全部样本都分配到某个叶节点上。
这里咱们用信息论中赫夫曼码的理论框架,来从新看一下决策树的建树逻辑。
从上述讨论能够看到,决策树模型的本质就是一个赫夫曼码编码方案,所以,咱们能够借助赫夫曼码的定理和引理来看决策树的算法优缺点。
由于决策树的建树过程,符合赫夫曼码的贪婪搜索算法,每一次都是局部最优的,且全局也是最优的。因此,决策树的树结构表明了对数据特征的一种最短编码。
怎么理解这句话呢?简单来讲,决策树能保证在用最短的步骤将数据映射为一个具体类型,即从一个信源编码为一个序列信号。再通俗一点说就是,将一个数据X映射为一个具体的Y。在具体的分类或者回归任务中,Y指的就是离散类型或者回归值。
成也萧何败萧何,基于赫夫曼码的坚实理论,决策树得到了高效的信源信号描述能力的同时,也一样面临着赫夫曼码的缺点,这是熵自己性质带来的。
这就是咱们前面说的,这就是像香农码/赫夫曼码这种熵码,对大量的小几率事件,不能及时中止,而会不断地给其分配新的码字,这样的后果就是,当数据集特征中,有大量的小几率特征,决策树的深度会变得很深,最终致使过拟合。
这样说有些抽象,咱们虚构一个例子来讲明。
假设如今有一个数据集,咱们已经完成了特征工程,准备训练一个决策树模型,如今数据集各个特征各自的几率分布为,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
目前还没法完全思考的问题,留待之后继续深刻研究