您的位置:首页 > Web前端

林轩田之机器学习课程笔记( combining predictive features之 decision tree)(32之25)

2018-01-02 18:05 330 查看
概要

决策树假设空间

决策树演算法

决策树之卡特算法

决策树实战

欢迎转载,可以关注博客:http://blog.csdn.net/cqy_chen

对于模型融合可以参考:

http://scikit-learn.org/stable/modules/ensemble.html

决策树参考:

http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html

某不才,也写过玩具版本的决策树,写下林轩田系列笔记主要是在kaggle竞赛过后再进行回味,好茶总是要慢慢品的嘛。

http://blog.csdn.net/cqy_chen/article/details/77721637

http://blog.csdn.net/cqy_chen/article/details/69803181

题目可能不全,因为有字数限制,不好意思,可以参考:

https://www.csie.ntu.edu.tw/~htlin/course/ml15fall/

概要

上次讲到了adaboost算法,通过调整资料权重的方式得到不一样的基本模型,然后根据模型表现通过线性的blending方式进行组合。

本节介绍stacking的方式组合模型,即:决策树。

Tablesblending方式方法案例
模型统一票数投票/平均bagging
模型不统一票数线性融合AdaBoost
非线性融合模型堆叠决策树
所以前面已经将bagging和AdaBoost算法讲解完毕,本节就讲解通过非线性融合的方式,模型堆叠成决策树。

决策树假设空间

决策树和人类做决定的思路类似的。如下图所示:



比如今天下班比较早,然后看看有没有约会,如果没有就看看线上课程,这就是一种模仿人类决策方式。

决策树路径代表了决策的思路,而叶子节点代表了最后的结果。

这个用数学表达如下:

G(x)=∑t=1Tqt(x)gt(x)gt(x):是叶子节点,一般表示常数。qt(x):是指叶子结点是否在从根节点到该叶子节点的路径上。如果在就返回1,不在就返回0

也可以采用另外的表示形式:



这就是采用递归的方式表示决策树。

决策树的一些优点和缺点:

1)决策树模仿了人类做决定的过程,可解释性比较强

2)简单

3)有效率

缺点:

1)理论保证比较少,实践来实现

2)由于理论保证比较少,这样就导致有各种各样的决策树,至于谁好,不知道。

本节中介绍的是卡特树,因为这是GBDT以及XGB的基础模型。

决策树演算法

首先看看决策树的递归形式:

G(x)=∑c=1C[b(x)=c]Gc(x)

这个式子表示要构造一个决策树:

1)确定分割的函数,b(x)

2)将剩下的数据按照b(x)进行分割

3)构造子树Gc(x)

4)最后返回G(x)

这里涉及到四个问题需要解决;

1)怎么做分支,即:b(x)

2)分支分多少个?

3)什么时候递归停止

4)叶子节点怎么表示,就是我们的基本模型。

本节介绍的cart树是这么来做的。

1)每次分支,只分两次就是一个二叉树。

2)对于基本模型gt(x)是一个常数,如果是分类就表示最大类的那个,如果是回归一般回传均值。就是使得Ein最小的那个值就好了,不一定是均值。

3)要切开之后,使得子树的资料很纯,这是决策树算法的核心,如何切分。cart算法是这么做的:

b(x)=argmin决策树桩h(x)∑1C=2|Dc with h|(切分后资料Dc的纯度)

这里的核心就是怎么来衡量纯度了,请看下图:



4)什么时候停止下来呢?

被迫停止

1:纯度为0,切开之后已经很纯了

2:切开之后资料都一样

如果只用这两个条件得到是完全生长的树。

决策树之卡特算法

cart树的算法步骤如下,实在写不动了,贴林老师的图:



上面的流程会带来一个问题,如果我们的资料都是不一样的,会导致一直切分,知道Ein=0。这不就过拟合了么。因为一直的进行切分,每次进行切分的资料点会也来越少,数据量少,但是使用的切割函数却没有改变,根据VC维理论,不就过拟合了么?

怎么来预防这个事情呢?当然是添加正则化啦。比如我们可以限定树的高度,树的宽度,树的叶子节点数目等。

如下:

G(x)=argminGEin(G)+λΩ(G)

后面那一项来限定树的复杂度,从而达到过拟合的目的。

这种方式一般称之为树的剪枝处理。

看这个公式,是要选择所有的G然后选择一个最好的,实际的情况一般不是这样做的。有先剪枝和后剪枝两种方法。这里介绍下后剪枝

1)先生成一棵完全长成的树

2)不断的丢弃叶子节点得到新的树,

在这些树中通过交叉验证的思想获得最后的结果。

关于剪枝,林轩田老师的视频中讲解的比较少,大家可以参考周志华老师的《机器学习》书籍https://item.jd.com/11867803.html

在cart树中,由于每次都是进行的二分类,对于数字和类别型的是不一样的,如下:



比如有类别,国家:(中国,美国,德国),那么我们可以凑成(中国,(美国,德国))、(美国,(中国,德国))、(德国,(美国,中国))三种分割方式,然后计算纯度,得到分割最后的分割方式。

对于缺失值的处理。对于cart这里的算法,如果一个特征值缺失,会去寻找另外的替代特征。保证算法的鲁棒性。比如在训练的时候是用的一个特征,但是预测的时候可能该特征就缺失了啊。

一般对于每次分割的特征,cart都会找一个相应的备选特征,保证备选特征做出来的结果差不多。

决策树实战

这里演示一个cart是怎么切分的:



这里演示了cart树如何对一个二分类问题进行切割,同时对比了cart算法和adaboost算法的决策边界。

决策树每次都是用部分的资料点,而adaboost是用的是所有的资料



看起来cart算法和AdaBoost算法的决策边界差不多,但是由于cart算法每次计算的量比Adaboost算法少,所以cart算法理论上应该计算更快。

欢迎转载,可以关注博客:http://blog.csdn.net/cqy_chen
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐