C4.5最新版本Release8与MDL的关系的详细解读

版权声明:本文为博主原创文章,可以随便转载 https://blog.csdn.net/appleyuchi/article/details/83242105

最近联系了决策树的作者Quinlan教授,搞清了网上对C4.5的一些不够前沿的描述,
《Inferring Decision Trees Using the Minimum Description Length Principle*》
《Improved Use of Continuous Attributes in C4.5》
对这两篇文章做下总结:

我们一般希望决策树可以稍微简化点,要不然就太乱了.
所以这篇论文怎么简化决策树呢?
作者提出使用MDL来简化决策树,简化的衡量指标是MDL,也就是MDL编码最短原则.
为什么使用MDL来衡量决策树?论文中提到,这个就是一个合理的artifice,也就是作者设置的一个合理的量化标准.
遵循这个标准对决策树进行简化
在这里插入图片描述
上面这个什么意思呢?比如说,我要找一个好姑娘,有的看身材,有的看心灵善良,所以众说纷纭是不行的,为了让这个衡量有一个尺度所以我定下来一个衡量的规则,这个规则就是MDL,也就是文章中提到的的artifice

所谓的MDL,就是从发送方传送"编码后的决策树模型+不遵守模型的一些例外数据"给接收方,要求发送的长度最短.

正好1996年以前,作者说有文章吐槽Quinlan的C4.5容易对"连续数值"的特征有偏袒,也就是说,从ID3的熵增益到C4.5的熵增益率作为判据以后,依然会出现分割时,倾向于选择连续数值特征作为分割特征的问题.

Quinlan教授看到有文章吐槽以后就对C4.5进行了最后一次改进,改进的文章就是《Improved Use of Continuous Attributes in C4.5》
这篇文章中的C4.5也是最后一个版本C4.5-Release8

下面详细解释MDL的原理.

这里的MDL:有sender和receiver两方,
两方具备相同的数据集,但是限定:
receiver的数据集没有类别标签,也就是裸数据
现在想让sender把这个分类规则发送给receiver
要求这个分类规则最短,这个就是决策树的MDL原则.

假如,一个连续数值的特征有N个取值,那么就有N-1个候选阈值.
我们采用独热编码的话,从sender->receiver,就需要N-1bit,
为了省事儿,我们进行压缩,需要bit数为log2(N-1)
例如:
某连续特征取值有9个,那么候选阈值是8个
sender发送011
那么receiver解码后是3,选择第3个(从第0个开始数)候选阈值作为该特征的分割阈值
这样呢,传输成本就从原来的8bit下降为log2(8)=3个bit,节省了5个bit

所以,Ross Quinlan教授对于决策树的简化与我们一般人理解的不同,我们一般可能百度上看个什么博客,深度浅一些啊,就是一个比较简化的决策树的.而Quinlan教授对于"决策树简化的量化程度",是依据于MDL原则的.

所谓的MDL有一些限定:
sender与receicer可以事先约定第几个bit的数值代表什么含义.
sender与receicer可以事先约定可能的取值的列表,例如sender告诉receiver对连续特征进行分割时,第几个阈值作为分割阈值,那么这里至少需要log2(N-1)bit才能表达是第几个.

这篇文章中,log2(X)的含义,其实是,对X采用二进制编码,我需要几个bit?

另外,这篇论文的相关实现中,关于分支数量是:
离散的特征可以2分支及以上.连续的特征的对应分支一律2分支,连续的特征,不存在多分支.

整个C4.5-Release8算法的细节总结如下面链接所示:
https://blog.csdn.net/appleyuchi/article/details/83154696
关于MDL+决策树的具体实例可以看下面的链接:
https://blog.csdn.net/appleyuchi/article/details/83216608

这两个链接都联系Ross Quinlan教授看过,已经没问题了.

先总结下MDL:
MDL的原因:希望sender给receiver的决策树编码规则最小+exception编码最小
MDL的好处:进一步降低"优选连续数值特征"为分割特征的"倾向性"

所谓的exception指的是,决策树不完美或者输入数据有噪声的时候,导致按照这个决策树规则判定的结果是错的,这个时候就需要对这些例外(exception)的案例进行编码,从sender传输到receiver.

另外,关于第一个链接中的连续数值特征的判据使用,再做一些补充.
D D , T l o g 2 ( N 1 ) , T \frac{D·Gain(D,T)-log2(N-1)}{D·Split(D,T)}
表示的是:
\frac{类别标签列的熵编码bit数-划分特征的熵编码bit数-阈值的编码bit数}{划分特征的熵编码bit数}

前面提到了exception,那么上面的分子是啥呢?它的含义在第二篇文章中有提到:
MDL thus provides aframework for trading off the complexity of a theory against its accuracy on the training data D D .
The exceptions cost associated with a set of cases D D is
asymptotically equivalent to D |D|·Info(D) so that , T |D|·Gain(D,T) measures the reduction in exceptions cost when D D is partitioned by a test T T
也就是说,当D被T分割时,分割前后产生的例外(也就是不满足决策树分类规则的所有数据)的编码成本的降低bit数(reduction),
当D被T分割时,需要的编码成本是:
D i = 1 k D i D i log 2 ( N 1 ) D·\sum_{i=1}^{k}\frac{D_i}{D}·Info(D_i)+\log_2(N-1)
这里的N是连续特征的取值的种数.
这里的k=2,C4.5的连续特征分割时,都是二树叉的,不存在多树叉.
只有离散特征才是多树叉.
这里的例外(exception)什么意思呢?举例:
特征 类别
0.1  0
0.3  1
0.6  0
0.8  0
如果现在分割阈值=0.5
那么此时连续特征转化为离散特征处理,也就将区间分成两个子区间
那么前两条数据中,0.1和0.3对应的类别分别是0和1,也就是说,
决策树的规则中到这一步为止,使用该特征不能完美描述数据集,
这个时候就存在exception,为了对exception进行编码(MDL的要求)
每个子区间需要消耗的编码数量为 D i Di·Info(Di)
所以,用来确定到底选择哪个特征作为分割特征的判据变成:
到底选择哪个特征,能够使得exception的编码数落差最大(文中提到的reduction in exceptions cost).

因为我们分割的时候,数据集每经过一个节点,数据集总量就会下降,所以exception的意思就是当前数据集不能使用"已经经过的树枝(也就是从根节点到当前节点的一堆判定规则)"来判定,所以称为exceptions

以上是为了精确地理解C4.5的最新版本,
但是呢,面试的时候,不要说这么多,因为面试官也是打工的,
比较浮躁,你就说熵增益最大就行了.

猜你喜欢

转载自blog.csdn.net/appleyuchi/article/details/83242105