机器学习西瓜书复习 - 2 决策树

目录

A 说明

决定复习决策树算法之前,尝试了用sklearn的API去做一些数据分类、预测的任务,效果很不好,为此纠结了将近2个小时要不要花费时间来深入学习一下skearn的决策树实现和用法,想想还是算了,目前的重点要放在自然语言处理上面,用python画画好看的统计图是可以的,其他的麻烦事,超出精力与能力范围之外了。想着想着不由得想到了关于代码重构的一句很喜欢的话,一次只做一小步,一次只做一小步是一种很精髓的哲学思想,让人不那么容易为外物所侵扰,相对的,如果每一步都走偏一点,那么不多久便积重难返了。这里记录一下,遇到可能跑偏方向的学习路线,不管多诱人,要像个大丈夫随时下决定,仅以此自省。
西瓜书关于决策树的描写,乍一看像是比线性回归要简单,基本的过程是:I 设计处理缺失值的方法 II 对数据进行划分,并递归生成决策树 III 剪枝。因为太简短了,我又去复习了一下貌似决策树的随机森林、梯度提升树、以及树状神经网络,发现这些概念的本质都是归属于模型树。于是乎,在用简单的决策树去处理一些数据挖掘比赛题,并受到其打击之后,便想要尽快写完这篇复习了

B 数据划分

决策树的主要训练过程是利用数据本身的性质寻找一个数据集的一个划分,划分是指利用数据的一个性质,将整个数据集切成几个隔离的部分,比如利用颜色来将一堆水果划分为红色的和非红色的。一次划分结束之后,产生了原数据集的一些子集,比如其中一个子集为红色的水果。此刻,可以选择继续按照其他的规则划分,也可以选择停止划分。经过一系列划分后,用来划分的节点,及其节点间的路径,组成了一棵决策树。
主要是划分的方法,如果知道了如何划分,那么生成一颗决策树的全部过程就如上述所说那样

B.1

划分的方法有很多种,最直接的一种,是利用数据集的熵。熵是一种表征数据集混乱程度的度量方法,用一个例子来说明熵是最好的。比如有一筐水果,里面有8个苹果,4个梨,2根香蕉,2个橘子,现在闭上眼睛,从里面随机拿出一个水果,去猜测水果的种类,需要猜测的次数,可以理解为熵的一种形式。先考虑极端的情况,假如框里只有苹果,那么不要猜测,便知道拿出的水果是什么,此时熵是很小的,因为水果的分布很简单。又假如框里各类水果各一个,得到一个完美的均匀分布,猜出任意一个水果最少需要16次,即选择猜橘子,但是先后拿起苹果、西瓜…橘子。对于其他情况,需要不到16次即可猜出所有的水果,此时框里的水果的情况已被我们摸清,眼睛可以睁开了。
从定量的角度看,令水果i的概率为pi,并且猜水果只给出“是”和“否”两种答案,故猜出水果ip的最少次数应当是log(1/pi),如果将猜测的过程画成一颗二叉树,会更加明显。那么将所有水果全部猜出,所需的次数为 对pilog(1/pi)进行求和,稍微化简一下,即为熵的公式。这只是理解熵的一种方式,更加准确的描述,是对水果进行编码,对用以表达框内水果的最短编码进行计算,亦可以得到类似熵的数学公式,具体过程可以画一个哈夫曼编码树来展示。
这里的熵用的最少的次数或者是最短的编码,自然而然,让人想起著名的最大熵模型,于是脑子里蹦出了一个疑问,都是求最优解,为何一个最大一个最小?这里需要提到一个概念,熵作为数据划分的依据时,数据分布是已知的,即数据的各个维度下的各种概率是已知的,已知一个分布,将数据集的数据梳理清楚所需最少的信息能量即是熵,这里的熵只是一个表述分布状态的一个概念,分布定下来了,熵也随之确定了。而最大熵模型,是针对未知分布而言的,给定一定的先验信息,来寻找最优分布。同样考虑一种极端情况,没有任何先验信息,我们对一个数据集的分布信息一无所知,这时候人会倾向于选择均匀分布来作为数据集的分布。
均匀分布是我最喜欢的分布,天下分二仪,二仪生四象,均匀不仅蕴含了丰富的哲学原理,还意味着公平,个人认为,公平,在一定程度上,即是自由的代名词
如果已知了先验分布,那我们依然追求一个均匀分布,准确的说,是一个最混乱的模型,只不过以先验分布作为限制条件,来对条件熵(条件熵,即p
log§ 中的p替换为条件概率p(y|x)的形式)的公式求最优解,并进而将问题转化为一个求解对偶问题,过程比较长,结果就是一个指数型的分布,样子比较像softmax,并且,如果将该问题投射到二分类问题,那么得到的结果就是一个logistics回归。这也回答了上一节,为什么logistics回归需要选择sigmoid函数,背后的数学基础就是最大熵模型。

B.2

言归正传,对于数据划分而言,采用的是一种信息增益的计算方法来利用熵。先看增益,对于数据集而言,数据分布越简单,则数据纯度越高,即数据内类别较少,亦数据更大可能属于同一类,此时,熵越低,而进行一次数据划分之后,如果总体的熵下降的越多,说明划分后的子集中的数据纯度越高,即子集下的数据更有可能属于同一类,换言之,这提到了分类的效率,故称之为增益。信息增益如同生成决策树模型的损失函数,一旦定下,便一步一步进行计算、划分即可。需要注意的事,为了避免一些数据个数较多,尽管纯度较高,但是由于计算熵时的累加操作,得到了更大的熵,故需要乘上一个Di/D作为正则项
另一方面,常见的划分方式还有一个GINI函数,基本形式是1-p*p,数学含义是任取两个数据样本i, j,二者属于同一类的概率,直观上来看,数据集纯度越高,二者属于同一类的概率越大。实际上,如果制造一个随机的数据分布,计算相应的熵和GINI,计算结果进行归一化之后,二者的图像也基本是一致的。

B.3

总结一下熵的概念,未知分布时,我们期待一个尽可能公平随机的分布;已知先验分布时,用以计算最随机的分布的方法,叫做最大熵模型;计算最大熵模型时,用到了条件熵,即给定已知先验分布作为条件,得到了一个新的分布,条件熵即此分布的熵;由条件熵,很容易想到相对熵,相对熵也是针对两个分布而言的,其中一个分布是真实分布,另一个分布是非真实分布,这次以最短编码为例,已知真实数据集的情况下,此时使用另一个非真实分布对其进行编码,由于真实分布是最短编码算法得来,因此,这里得到的平均编码长度即是相对熵,这个熵肯定是要大于真实分布的,大的越多,两个分布的相似度越低,这里有一个专门的名词,用来表示二者的相差程度,为KL散度

C 剪枝

C.1

决策树剪枝的基本思路是为了缓解决策树可能引起的过拟合问题。具体操作是将一些非叶节点合并为一个单独的叶节点。同决策树生成一样,剪枝的其中一个关键在于合并节点的选择,另一个关键是何时停止剪枝。

C.2

先看第一个,这里定一个损失函数,可以是信息增益、GINI,亦可以是其他算法定义或自定义的函数,其目的是为了表征决策树的性能。剪枝的过程中,进行的每一步操作,通常要保证决策树剪枝后的损失函数比未剪枝的损失函数更小。从这个角度来看,剪枝也是另一个角度的优化。
再看第二个,何时停止,其实生成决策树时,也有同样的概念,即stop early,但是这样的操作会漏掉一些样本信息,因此很少用到。而剪枝时,有时会设定一个指标,比如损失函数值、节点数值等等,一旦指标达到,则剪枝停止,以防止过度剪枝影响决策树性能。
有时候,stop early亦不会出现在剪枝中,而是按照特殊设定的损失函数,依次将整棵决策树剪干净,得到一系列的中间结果。再对这些中间树进行交叉验证,选择其中最好的树作为结果返回。
从实验的结果来看,简单的用决策树去预测复杂的数据,效果不好,这应该是个人没有足够的时间花费在优化决策树上的原因。按照个人理解,不论是生成决策树还是剪枝,其中用到的损失函数技术,都可以因时而异,甚至根据需要引入一些随机性的变量进去也是可以的,这里留待下次复习再看

D 异常值处理

异常值,主要是指连续值、缺失值,这里直接照搬西瓜书的处理方式
D.1 连续值,对连续值列表[a,b,c…],进行排序之后,取其两两数之间的中点,生成平均值列表[m1,m2,m3…],依次选取其中的mi进行数据划分,择其最优则可
D.2 缺失值,这部分举个具体例子,若有样本X西瓜颜色值缺失,数据集中有红色西瓜20个,黑色西瓜10个,则对颜色进行划分时,该样本的其他值以1/3的度量归入黑色西瓜的划分中,以2/3的度量归入红色西瓜的划分中。实际上,对于异常值的处理,还需要大量的分析和实践,下次复习的时候,还得继续写

E 模型决策树

写博客是一件很有意思的事情,把学过的东西复述下来,哪里没学好,哪里需要进一步掌握一目了然,比如上述的最大熵模型说的不是很清楚,因为没有熟练的把最大熵模型的推理公式背下来,而实验中需要用到的异常值处理、决策树变种等问题,因为项目经验较少,想言简意赅的说出来,也没什么头绪。所以说,这时间和精力,花费的还是值得的。
模型决策树,顾名思义,即树上的节点,不仅仅是一个简单的计算熵的公式,而是用更加复杂的模型来决定数据的划分,并且作为决策路径的节点。
举两个常见的例子,用logistics回归作为划分依据,每个节点都是一个回归模型,根据样本的输出,来决定样本进入节点的哪个划分。同理,用神经网络作为划分依据,每个节点这是一个神经网络模型。至于随机森林、梯度提升树,尽管用到了决策树作为学习器,但是把决策树替换为另外一种学习器,也并不是不可以的,所以这二者本质上是一种集成学习的方法,这里就不放在跟决策树一起复习了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值