首先沿着上节课的AdaBoost-Stump的思路,介绍了Decision Tree的路数:

AdaBoost和Decision Tree都是对弱分类器的组合:

1)AdaBoost是分类的时候,让所有的弱分类器同时发挥作用

2)Decision Tree是每次根据condition让某个弱分类器发挥作用

林强调了一点,Decision Tree很多套路都是前人的insights,觉得这用好就这样处理了,没有那么完备的理论保证。

从递回的角度,可以这样看Decision Tree:

Decision Tree = Σ分支条件.子树

根据如上的递回思路,可以写出Decision Tree的算法的大概思路:

有点儿像dfs的代码模板:

输入:N个样本点

终止条件:达到base hypothesis gt(x)

dfs步骤:

  1)获得分支条件

  2)根据分支条件,将数据切分成C份

  3)由这C份数据生成C棵子树

  4)将C棵子树 & 分支判断条件 合在一起return

其中很关键的一个步骤就是如何划分输入样本D成C分,这里介绍一种C&RT的方法。

这个方法的特点是每次只产生2一个判断条件,将数据分成两份(即binary tree)

选择判断条件的准则是:经过判断条件的划分后数据更纯了。

这里的“纯”还做了一个处理,就是“加权纯”,如果样本量大的那一堆数据更纯,认为划分的效果更好。

到这里需要停顿一下,整理下思路:b(x)是根据x划分分支条件的函数,跟定一个x就产生一种分支,即对数据产生一种划分。

接下来要考虑,划分出来的每组数据的impuirity如何计算呢?

根据需求不同impurify有两种计算套路:

1)如果是regression的:就可以用均方差来衡量

2)如果是classification的:就可以用Gini index来衡量(想象一个极端情况,如果数据D都属于一类了,那么Gini index就是0了,即不纯度是0)

接下来,看这种算法迭代的终止条件:

有两种强行终止条件:

1)如果impurity=0了,即只剩一类数据了,就不用再划分了

2)如果xn全部相同了,也没法划分了,因为b(x)的输出只有一个

完整的C&RT算法如上图,非常neat的算法。

但是上述的算法隐含问题,就是overfitting的问题。

可以通过剪枝来处理这个问题,一个可行的算法就是,每次除去叶子节点i,保证除去某个叶子节点后Ein(i)能最小。

另外,考虑pratical场景,有可能有枚举类型(categorical features)特征,对于这样的特征C&RT模型也可以轻易的处理。

如果有missing feature怎么办?

其中一个办法就是surrogate branch,简单来说,就是如果某种属性缺失了,可以找到其替代品。

最后林对比了Decision Tree和AdaBoost-Stump两种算法:

区别:

1)C&RT可以conditional的切,切的效率可能更高

2)AdaBoost-Stump只能完全横刀或完全竖刀来切,有可能没有Decision Tree切的效率高

最后,林总结了Decision Tree的优势:

真是居家旅行必备...

【Decision Tree】林轩田机器学习技法的更多相关文章

  1. 【Random Forest】林轩田机器学习技法

    总体来说,林对于random forest的讲解主要是算法概况上的:某种程度上说,更注重insights. 林分别列举了Bagging和Decision Tree的各自特点: Random Fores ...

  2. 【Matrix Factorization】林轩田机器学习技法

    在NNet这个系列中讲了Matrix Factorization感觉上怪怪的,但是听完第一小节课程就明白了. 林首先介绍了机器学习里面比较困难的一种问题:categorical features 这种 ...

  3. 【Deep Learning】林轩田机器学习技法

    这节课的题目是Deep learning,个人以为说的跟Deep learning比较浅,跟autoencoder和PCA这块内容比较紧密. 林介绍了deep learning近年来受到了很大的关注: ...

  4. 【Radial Basis Function Network】林轩田机器学习技法

    这节课主要讲述了RBF这类的神经网络+Kmeans聚类算法,以及二者的结合使用. 首先回归的了Gaussian SVM这个模型: 其中的Gaussian kernel又叫做Radial Basis F ...

  5. 【Neural Network】林轩田机器学习技法

    首先从单层神经网络开始介绍 最简单的单层神经网络可以看成是多个Perception的线性组合,这种简单的组合可以达到一些复杂的boundary. 比如,最简单的逻辑运算AND  OR NOT都可以由多 ...

  6. 【Adaptive Boosting】林轩田机器学习技法

    首先用一个形象的例子来说明AdaBoost的过程: 1. 每次产生一个弱的分类器,把本轮错的样本增加权重丢入下一轮 2. 下一轮对上一轮分错的样本再加重学习,获得另一个弱分类器 经过T轮之后,学得了T ...

  7. 【Linear Support Vector Machine】林轩田机器学习技法

    首先从介绍了Large_margin Separating Hyperplane的概念. (在linear separable的前提下)找到largest-margin的分界面,即最胖的那条分界线.下 ...

  8. 【Support Vector Regression】林轩田机器学习技法

    上节课讲了Kernel的技巧如何应用到Logistic Regression中.核心是L2 regularized的error形式的linear model是可以应用Kernel技巧的. 这一节,继续 ...

  9. 【Dual Support Vector Machine】林轩田机器学习技法

    这节课内容介绍了SVM的核心. 首先,既然SVM都可以转化为二次规划问题了,为啥还有有Dual啥的呢?原因如下: 如果x进行non-linear transform后,二次规划算法需要面对的是d`+1 ...

随机推荐

  1. April 6 2017 Week 14 Thursday

    If you smile when no one else is around, you really mean it. 独处时的微笑,才是发自内心的. Recently I found I seld ...

  2. 4. NBU文件备份与恢复,图形界面&字符界面操作

    一. 图形界面文件备份与恢复 1.1  文件备份 待补充 1.2 Windows文件恢复 (1) 打开恢复客户端 (2) 检查设置 (3) 查询可恢复信息 (4) 选取恢复时间点和文件 (5) 选择恢 ...

  3. 矩阵——特征向量(Eigenvector)

    原文链接 矩阵的基础内容以前已经提到,今天我们来看看矩阵的重要特性——特征向量. 矩阵是个非常抽象的数学概念,很多人到了这里往往望而生畏.比如矩阵的乘法为什么有这样奇怪的定义?实际上是由工程实际需要定 ...

  4. 公众帐号如何向用户发送emoji表情(php版,附emoji编码表)

    //字节转Emoji表情 function bytes_to_emoji($cp) { if ($cp > 0x10000){ # 4 bytes return chr(0xF0 | (($cp ...

  5. extjs3EmptyText 上传自动清空的问题

    在extjs3表单的操作中,输入框经常有提示性的默认字段,比如: // === 接入单位的Form表单 ====== var jrdwForm = new Ext.form.FormPanel({ b ...

  6. python模块之正则

    re模块 可以读懂你写的正则表达式 根据你写的表达式去执行任务 用re去操作正则 正则表达式 使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容.在线测试网站:http:/ ...

  7. LeetCode970. 强整数

    问题:970. 强整数 用户通过次数0 用户尝试次数0 通过次数0 提交次数0 题目难度Easy 给定两个非负整数 x 和 y,如果某一整数等于 x^i + y^j,其中整数 i >= 0 且  ...

  8. HTML语义化的重要性

    语义化标签就是尽量使用有相对应的结构的含义的Html的标签 1.结构更好,更利于搜索引擎的抓取(SEO的优化)和开发人员的维护(可维护性更高,因为结构清晰,so易于阅读). 2.更有利于特殊终端的阅读 ...

  9. 课时27.base(掌握)

    base标签就是专门用来统一的指定当前网页中所有的超链接(a标签)需要如何打开 格式 <base target="_blank"> <a href="h ...

  10. InteliJ IDEA 设置eclipse快捷键

    从使用eclipse切换到intellij idea开发工具常常会伴随这快捷切换的困扰,今天写到将intellij idea快捷键设置为eclipse快捷的方式 步骤如下: file -> se ...