决策树算法教程(一)

原文:https://www.analyticsvidhya.com/blog/2016/04/complete-tutorial-tree-based-modeling-scratch-in-python/

Introduction

    基于树的学习算法,一贯被认为是最好的、最有用的监督学习方法。这种方法可以有效的保证预测模型的高准确度,稳定性和易理解性。不同于线性模型算法,他们可以很好的反映非线性关系。他们可以很容易的使用在需要解决的任何类型的问题上(分类或回归)。

    像决策树算法,随机森林,梯度推进等算法,已经被广泛使用在解决各种类型的数据科学问题当中。因此,对于每一个数据分析者而言(当然也包括菜鸟啦),学习这些算法原理并在实践中使用这些模型,是很有帮助和必要的。

    该教程的只要意图,就是帮助那些新人摆脱" 抓耳挠腮,无处下手 “ 的状态,帮助他们从基础开始,逐步打开学习的大门。希望大家能在完成本轮学习之后,能够熟练的使用基本的算法逻辑和构建预测模型。

 注意: 本教程并不需要任何的机器算法基础。但是基本的 R 或者Python的编程基础还是有一定的要求。

如果需要,可进入学习 full tutorial in R and full tutorial in Python.

Table of Contents

    1. What is a Decision Tree? How does it work?
    2. Regression Trees vs Classification Trees
    3. How does a tree decide where to split?
    4. What are the key parameters of model building and how can we avoid over-fitting in decision trees?
    5. Are tree based models better than linear models?
    6. Working with Decision Trees in R and Python
    7. What are the ensemble methods of trees based model?
    8. What is Bagging? How does it work?
    9. What is Random Forest ? How does it work?
    10. What is Boosting ? How does it work?
    11. Which is more powerful: GBM or Xgboost?
    12. Working with GBM in R and Python
    13. Working with Xgboost in R and Python
    14. Where to Practice ?

 

 

1. 什么是决策树?它如何工作?

    决策树是一种监督学习算法(具有预先定义的目标变量),在分类问题上作用效果明显。它适合于分类和连续输入、输出变量。在算法过程中,我们会基于最有效的分离器或者区分器,将样本分为两个或多个同类集合(或者子样本集),如下图。

dt

示例:

    我们有一个包含有30位同学的样本集,他们都有单个不同的标签:性别(男,女),班级(IX/X)和身高(5 to 6 ft)。他们其中有15人在课余时间是喜欢打板球的。那么现在,我们想构建一个模型,来预测一下,那些同学在课余时间喜欢打板球!在这个问题中,我们需要基于这三个输入中最显著的特征的输入变量,来划分所有的同学,进而得到问题的答案。

    通过树形图,我们可以看到,基于每种变量和其取值,我们可以将同学分成不同类别的样本组,每组之间都是完全不同类别的。如下图,对比可以发现,性别标签,比其他两个标签能够鉴别出最好的同类集。

103050_Ffqi_3487080.png

    如上所述,决策树能够标识出最有效的变量和取值,这些变量和值能够很好的区分原始样本。那么问题来了,它是如何从所有标签中确定这个最有效的标签的呢?为了解决这个问题,决策树算法使用的多种算法,下面我们就要讨论一下这些算法。

决策树的类型

决策树的类型,是基于我们已有的目标变量的类型而定的,共有两类:

  1. Categorical Variable Decision Tree: 离散变量决策树,顾名思义,他的目标变量是离散状态。比如:上面提到的学生的例子,目标变量就是“学生玩板球或者不玩”,也就是两种状态:是,否。
  2. Continuous Variable Decision Tree: 连续变量决策树,顾名思义,他的目标变量是连续状态。举个例子:假如我们想预测一个客户是否会继续给他的保险公司缴纳保金(当然这个结果是离线的,即,交或者否)。但是我们发现对所有的客户,工资输入是影响交否的一个重要变来变量,但是保险公司去没有所有用户的工资细节信息。因此,我们可基于用户的职业,产品以及其他各式各样的变量,来构建一个决策树来预测客户的输入决策树。这个例子中,我们的预测值(工资)就是个连续变量了。

 

决策树术语

Decision Tree Terminology, Root Node, Branch, Splitting, Pruning

  1. Root Node:根节点,代表全部样本集合。

  2. Splitting: 拆分,将一个节点分割成多个节点的过程

  3. Decision Node: 决策点,当一个子节点还可以被继续拆分,那这个子节点就是一个决策点。

  4. Leaf/ Terminal Node: 叶子/终结点,不能在被拆分的节点

  5. Pruning: 剪除,移除一个决策点的子节点的过程

  6. Branch / Sub-Tree: 分支, 整个树的一个分路径,就叫一个分支

  7. Parent and Child Node: 父节点/子节点,一个节点,把它拆分成多个子节点,那么这个节点就是父节点。

 

优点

  1. 容易理解,基础要求低.
  2. 在数据分析上很有用,可以帮我们快速从众多变量中找到最有用的,最有意义的标签
  3. 无需数据清晰,能够很好包容异常、缺失数据
  4. 能够同时处理数据型和常规型属性
  5. 无参算法,即无需假定空间分布或者分类框架等

 

缺点

  1. 过分拟合。这个问题通过设置模型参数和修剪的约束来解决(详见下文)。
  2. 不适合连续变量。

 

 

2. Regression Trees vs Classification Trees

我们都知道终端节点(或叶子)位于决策树的底部。这意味着决策树通常是颠倒的,就像叶子是底而根是顶一样(如下图所示)。

111

这两种树的工作原理几乎是一样的,让我们来看看分类和回归树之间的主要差异和相似性:

  1. 回归树通常在因变量连续时候使用;分类数则是在因变量离散时用
  2. 回归树中,训练数据中终端节点所获得的值是该区域观测值下降(observation falls )的平均响应。因此,如果一个看不见的数据在那个区域下降,我们将用平均值来做预测。
  3. 在分类树的情况下,训练数据中终端节点获得的值(类别)是该区域的观测值。因此,如果在该区域中有一个看不见的数据,我们将用mode值进行预测。
  4. 这两种树将预测空间(独立变量)分为不同的和非重叠的区域。为了简单起见,您可以将这些区域看作是高维的箱子。
  5. 这两棵树都遵循自顶向下的贪婪方法,称为递归二进制分割。我们把它称为“自上而下”,因为它从树的顶端开始,当所有的观测都在一个区域内,并相继将预测空间分成两个新的分支。它被称为“贪婪”,因为算法只关心当前的分割,而不是未来的分裂,从而构建出更好的树。
  6. 这种分裂过程一直持续到用户定义的停止标准达成。例如: 一旦每个节点的观察次数小于 50时,我们可以让算法停下来。
  7. 在这两种情况下,分裂过程会导致完全长成的树,直到达到停止的条件。但是,完全成熟的树可能会过分拟合数据,从而导致不可见数据的不准确性。这这将造成“修剪”。修剪是解决过度拟合的技术之一。在下一节中,我们将进一步了解它。

 

未完待续。。。

 

转载于:https://my.oschina.net/u/3487080/blog/1524837

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值