决策树在机器学习的理论学习与实践

决策树,是一种传统机器学习算法,也是机器学习的入门算法之一。在它的基础上,衍生了随机森林、GBDT、XGBOOST等在CTR领域效果极佳的算法,因此,对它的学习可视为通向高级算法的必经之路,同时,它具有极强的可解释性,可应对回归与分类问题,也视为商业应用展示的不二之选。对学习算法的入门者来说,了解决策树很有必要,为此,飞马网于3月27日晚,邀请到毕业于美国密苏里大学机器视觉实验室的黄楷老师进行线上直播,黄老师向大家分享了关于决策树的相关理论与实践应用。

微信图片_20180328152725.jpg 

以下是本次分享的主要内容:

一.简介

1.在看简介之前,我们先讨论几个基础问题:

机器学习包括有监督学习和无监督学习。有监督学习是明确地表明每个样本的类别或数值,在有监督学习之下,又分为分类和回归问题,分类问题表示预测每个样本的类别,而回归问题表示预测每个样本的具体数值。无监督学习并没有给出样本的类别或数值,它会通过一系列的算法进行聚类。

今天我们要学习的决策树属于有监督学习,它可以处理分类和回归两个问题。

2.决策树简介:

幻灯片2.jpg

上面这张图片就是决策树的简介,大家可以先简单了解一下,后面会有深入的探索。

二.决策树的结构

幻灯片3.jpg 

我们可以看到上图左是一个非常基本的树形结构,学习数据结构的人对此一定很熟悉。我们重点看头部的根节点,下面的叶子节点代表分类后的结果,下面的分支代表数据的判定条件,例如第一层是大于0.99、大于1.20、大于3.20等。

三. 决策树使用的阶段

1.在我们使用决策树的时候,分为两个阶段:训练阶段和分类阶段。

幻灯片4.jpg

训练阶段我们会通过已有的数据训练一个模型,分类阶段我们会通过模型进行数据的预测,通常我们会将数据随机分为十个部分,将八个部分进行训练,取两个进行测试,测试的数据不会出现在我们的训练数据中,我们最终的结果也是以测试的数据为准,最后通过一个交叉验证,得到准确率。

2.例子:

下面我们通过一个国外信用卡的例子来进行学习。

幻灯片5.jpg 

第一列表示数据的ID,第二列表示是否有退税,第三列表示婚姻状态(单身、离异、已婚),第四列表示纳税收入,第五列就是我们要预测的。

严重的话,可理解为这个人是否有过信用卡诈骗记录,不严重的话,可理解为是否信用卡有逾期等等。

我们可以称这里的数据有十个样本、三个属性,“categorical”表示数据是离散的,“continuous”表示数据是连续的,“class”表示我们要预测的类别。

通过一系列的感性认识,同学甲可能会构建出上图右的决策树,黄色的字指判定的是哪一列,箭头上的值指的是判别的值,蓝色的字指预测的结果。

对于同学甲这个模型,我们来看一看他是怎么判别的:

幻灯片6.jpg 

幻灯片7.jpg

这时候同学乙可能会觉得不大满意,他认为婚姻可能是最重要的,就把婚姻放在决策树的第一位:

幻灯片8.jpg 

以上的这个例子是对决策树的感性理解,通过对每一步进行判别,来得到最终的目的。

四.如何理性地建立决策树

下面我们来进行理性的思考,到底如何去建立决策树?

1.建立决策树的基本步骤:

幻灯片9.jpg 

对于树的截止问题,从上图中我们得知,它有两个结束的条件,一是所有的叶子节点属于同一类别,二是所有的备选属性已经选完。当达不到结束条件时,我们就会选择一个最佳的属性来进行构建。

2.例子:

幻灯片10.jpg 

幻灯片11.jpg 

幻灯片12.jpg 

幻灯片13.jpg 

由于之前的最优节点都是想出来的,因此就会遇到另外的问题,“如何去选择最优节点?”和“选择节点时遇到连续性数据时,如何处理?”

幻灯片14.jpg 

3.如何去选择最优节点:

接下来,我们攻克一下这些问题。首先引入一个概念—信息熵。它是一个物理概念,主要描述信息的混乱程度,熵越大,信息越混乱,它的公式如下图所示。

幻灯片15.jpg 

下面是信息熵的一些特性:

幻灯片16.jpg 

在构建决策树时,我们会选择信息熵的一个差值来进行构建,我们来具体看一下例子:

幻灯片17.jpg 

在上图的例子中,我们有14个样本,5个是“No”,9个是“Yes”,属性有天气、温度、湿度、是否刮风。通过这四个维度,我们决定要不要去打网球。

选择第一个节点的时候,我们有四个备选方案:

幻灯片18.jpg 

到底如何选取最优属性呢?我们可以先计算一下原始的信息熵,在原始数据里面有14个样本,我们套进公式得出,原始的信息熵是0.94。

幻灯片19.jpg

对于第一个备选项天气,我们可以分为三个值(晴天、多云、下雨):

幻灯片20.jpg 

得到天气各自熵的值之后,我们再通过各自熵的值乘以它发生的概率。按照天气属性我们得出熵的值是0.693:

幻灯片21.jpg 

同理,我们可以依次地计算温度、湿度、刮风的信息增益:

幻灯片22.jpg 

上图的值是说我们之前父节点的信息增益,5次不打球、9次打球的值减去按条件得出的信息增益,我们会发现,其实对于天气而言,它的信息增益是最大的,我们就会选择天气作为最佳的分裂节点。

其次,湿度的计算方式,就是我们之前讲的得到它的一个信息增益率,然后去挑选哪个是它的最优节点:

幻灯片23.jpg 

经过上面这些比较简单的构建方法,我们就能得到最终的决策树:

幻灯片24.jpg

五.建立决策树后的思考

在构建完这棵决策树之后,事情并没有结束,大家可以思考一下,在建模型的时候,我们总是希望它的准确率越高越好,但这些是不是我们要的一个结果?

1.在机器学习中,有一个词叫做“过拟合”。它表示我们的模型在训练数据时表现地很棒,但在面临外部数据的时候,它又显得不堪一击,我们一起来看下图:

幻灯片25.jpg 

图左是训练数据的一个分布,理想状态下图右是我们要得到的一个模型,但机器却不这样认为,机器觉得画个猫更适合,新来的数据通过这只猫会划分什么结果,我们不知道,这叫做Overfitting,就是过拟合。

2.决策树在训练集当中,的确有非常好的分类能力,但它对未知的测试数据而言,不是特别适应,产生过拟合现象,这时我们就需要剪枝。

幻灯片26.jpg 

决策树分为预剪枝和后剪枝。预剪枝就是通过人为的知识,确定节点样本数目以及树的高度和深度等,操作起来非常方便。但在实际应用中,我们会选择后剪枝。

决策树的剪枝通常会做以下这几个点:

幻灯片27.jpg 

我们比较常用的是悲观错误剪枝和代价复杂度剪枝。悲观错误剪枝,假设说决策树的精度在剪枝的前后并无变化,则进行剪枝,精度不等于错误度,如果说决策树剪枝后的误差小于剪枝前精度的上限,效果性是一致的,就进行剪枝。我们认为数越大越容易过拟合,代价复杂度剪枝融合了错误率和数的大小,形成新的值平衡两个因数,然后选择比较大的,剪枝处理掉。

六.决策树+

1.决策树差异:

构建一棵树的步骤我们已经清晰,上面所讲的方法比较传统,我们称之为ID3,除此之外还有其它的一些方法,我们来比较一下:

幻灯片28.jpg 

在ID3中,我们使用的是信息增益来进行判断,信息增益是父节点的熵减去子节点的熵的一个最大值。一个ID对应唯一的一个类,这样的话,它的信息增益值是最大的,它优先选择ID作为它分裂的节点,所以,我们的树只有两层,一层是判断ID,,一层是判定分类,并没有什么意义,人们就会开发出新算法来解决这些问题。

第一个新算法是C4.5,它不再使用信息增益的差值,而是使用信息增益率,信息增益率是子节点的熵除以父节点的熵,就可以很好地避免ID的问题。同时C4.5也可以处理连续性数据和缺失性数据,达到三赢的效果,其次C4.5可以解决回归问题,通过估算某一个具体的值。对于大数据而言,计算熵会涉及取对数的问题,速度并不是特别好。

人们又开发了一个新的算法,叫做CART,它使用基尼系数去代表信息熵,它不仅可以很好地去表示信息的存进度,而且抛弃了用对数计算,速度快、更靠谱。二叉树的处理避免了树的碎片化。

2.例子:

下面我们来看例子,加深一下理解。

幻灯片29.jpg 

这个数据集叫做Iris数据集,在入门学习阶段是一个非常常用的分类实验数据集,中文名叫做鸢尾花卉数据集,属于多重分类,包括150个样本,分为3类,每一列的花50个数据,每个数据包含4个属性,去预测鸢尾花属于哪一种。

下图是具体演示过程:

幻灯片30.jpg 

下面这张图就是最后决策树的一个值,我们简单看一下:

幻灯片31.jpg 

在我们实际应用中,比较常用的其实是随机森林,它速度快、不易过拟合。之后决策树还发展出GBDT梯度下降树,融合了“森林”的思想,增强错误样本的权重,它可以做特征处理。

在直播最后,黄楷老师还针对大家的提问进行了耐心讲解,我们一起来看一下:

1.自己动手实现这个计算过程,还是自己调用内建函数?

黄老师:我建议初学者自己先动手写一下整个计算过程,调包的话,工作中可以使用,但并不适合加深学习印象。

2.决策树要大量数学公式吗?

黄老师:决策树的数学公式主要体现在节点计算,包括信息增益怎么计算和剪枝理论,公式不大多,刚开始做的时候,可以先抛弃剪枝部分,只计算它的分裂节点、信息熵,这样的话,数学公式就不是特别多。

3.决策树的应用场景?

黄老师:其实在工作当中,我们已经很少单纯地只使用决策树,通常会使用随机森林和其它的一些算法。在数据展现方面,决策树会给人非常直观的理解,有着独一无二的优势。

以上六部分就是本次线上直播的主要内容,想了解更多更详细内容的小伙伴们,可以关注服务号:FMI飞马网,点击菜单栏飞马直播,即可进行学习。

服务号.jpg 

猜你喜欢

转载自my.oschina.net/u/3799785/blog/1787064
今日推荐