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

欢迎转载,可以关注博客: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):10

也可以采用另外的表示形式:
这里写图片描述
这就是采用递归的方式表示决策树。

决策树的一些优点和缺点:
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)=argminh(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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值