文档章节

决策树算法教程(一)

无畏布衣
 无畏布衣
发布于 2017/08/28 11:32
字数 2023
阅读 17
收藏 0
点赞 0
评论 0

原文: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人在课余时间是喜欢打板球的。那么现在,我们想构建一个模型,来预测一下,那些同学在课余时间喜欢打板球!在这个问题中,我们需要基于这三个输入中最显著的特征的输入变量,来划分所有的同学,进而得到问题的答案。

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

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

决策树的类型

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

  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. 在这两种情况下,分裂过程会导致完全长成的树,直到达到停止的条件。但是,完全成熟的树可能会过分拟合数据,从而导致不可见数据的不准确性。这这将造成“修剪”。修剪是解决过度拟合的技术之一。在下一节中,我们将进一步了解它。

 

未完待续。。。

 

© 著作权归作者所有

共有 人打赏支持
无畏布衣
粉丝 0
博文 2
码字总数 8394
作品 0
朝阳
机器学习之学习路线

# 机器学习教程 ## 生产案例 Scikit-Learn机器学习实践——垃圾短信识别 ## 引用 http://blog.51cto.com/6230973/1983254 机器学习入门 - 1. 介绍与决策树(decision tree) http://summertime...

heavenseahill
2017/10/13
0
0
入门 | 机器学习第一课:决策树学习概述与实现

  选自HEARTBEAT   作者:Ishan Sharma   机器之心编译      基于树的学习算法在数据科学竞赛中相当常见。这些算法给预测模型赋予了准确性、稳定性以及易解释性。其中,决策树算法...

机器之心
04/29
0
0
算法|决策树算法究竟说的是什么?

作者简介 浩彬老撕,R语言中文社区特邀作者。 个人公众号:探数寻理 决策树算法概述

kmd8d5r
05/10
0
0
教程 | 算法太多挑花眼?教你如何选择正确的机器学习算法

  选自Hackernoon   作者:Rajat Harlalka   机器之心编译   参与:Geek AI、张倩      机器学习算法虽多,却没有什么普适的解决方案。决策树、随机森林、朴素贝叶斯、深度网络等...

机器之心
07/01
0
0
传统算法如何转化成神经网络?| 回顾

在当今AI时代中,CNN和RNN都被广泛关注,并且有很多相关讨论,而最基础的神经网络DNN,它的研究和曝光度却相对较少。DNN是所有其它神经网络的基础,所以对它有一定了解是必要的。本文为大家详...

y0w1as5eg37urfds
2017/12/13
0
0
python执行各种sql语句,让你分析数据更简洁

由于许多潜在的pandas用户对SQL有一定的了 解 ,因此本页旨在提供一些使用pandas来执行各种SQL操作的示例。 大部分的例子将利用在pandas测试中发现的数据集。我们将数据读入一个名为tips的D...

frbevrqbn4l
2017/11/07
0
0
决策树(Decision Tree)简介

决策树(Decision Tree)及其变种是另一类将输入空间分成不同的区域,每个区域有独立参数的算法。决策树分类算法是一种基于实例的归纳学习方法,它能从给定的无序的训练样本中,提炼出树型的分...

fengbingchun
2017/12/23
0
0
python机器学习案例系列教程——层次聚类/聚类树

全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 聚类与分类器算法不同。聚类算法是非监督算法,只是对一群输入对象进行分组,每组属于什么类别是不知道的。而分类器是在没有任何...

luanpeng825485697
01/07
0
0
十分钟读懂python的“数据库”语言

JOIN可以用或执行。默认情况下, 将在其索引中加入DataFrame。每个方法都有参数,允许您指定要执行的联接类型(LEFT,RIGHT,INNER,FULL)或要联接的列(列名称或索引)。 假设我们有两个与...

frbevrqbn4l
2017/11/09
0
0
分享一个随机森林和决策树模型的实现代码

写文章之前总是想交待清楚这篇文章的产生背景,如果把这一章改成“引言”,总感觉太单调,并且有点写学术论文的感觉,好吧,就这样吧,改个字体说明一下写作背景。最近在修台湾大学林轩田老师...

练绪宝
2015/02/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

记elasticdump 备份数据导出导入

版本: elasticsearch 5.5.2 elasticdump 2.2 系统 CentOS7.3 因项目需求 从生产导出一份索引到测试 帮助文档 https://github.com/taskrabbit/elasticsearch-dump?utm_source=dbweekly&utm_m......

雁南飞丶
8分钟前
0
0
saltstack配置目录管理

1.服务端配置 -接着编辑之前的 top.sls 文件 #vim /srv/salt/top.sls //修改为如下 base: 'slaver.test.com': - filedir -新建 filedir.sls 文件 # vim /srv/salt/filedir.sls file-dir: fi......

硅谷课堂
8分钟前
0
0
python日期时间

日期和时间 Python内建的datetime模块提供了datetime、date和time类型。datetime类型结合了date和time,是最常使用的: In [102]: from datetime import datetime, date, timeIn [103]:...

火力全開
15分钟前
0
0
你不了解的v-show

vue指令v-show的使用 1、判断谋个元素是否显示或隐藏 <el-button v-show="list.power == 1" @click="toUpload" class="toUpload" type="primary">去上传<i class="el-icon-upload el-icon--r......

不负好时光
17分钟前
0
0
网站从一万到亿级流量的全景描述

故事的开头 如果你一毕业参见工作就进入了大型互联网公司,那么恭喜你了,你将体验到大公司深厚的技术底蕴以及企业文化。 如果你进入到了一个初创的中小型企业,那么也恭喜你了,你将可能体会...

大大枣
17分钟前
0
0
Tomcat中JAVA JVM内存介绍、内存溢出及合理配置

一、Java JVM内存介绍 JVM管理两种类型的内存,堆和非堆。按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创...

學無止境
17分钟前
0
0
centOS7.4+nginx 1.12.2负载均衡

centOS7.4+nginx 1.12.2负载均衡 2018年04月10日 09:24:51 阅读数:58 1:参数信息 三台 centOS7.4 A,B,C A作为主服务器,B C作为分流的服务器 都搭建 nginx 1.12.2 一:安装 nginx 1:下载...

linjin200
23分钟前
0
0
分布式之抉择分布式锁

前言: 目前网上大部分的基于zookpeer,和redis的分布式锁的文章都不够全面。要么就是特意避开集群的情况,要么就是考虑不全,读者看着还是一脸迷茫。坦白说,这种老题材,很难写出新创意,博...

Java大蜗牛
28分钟前
1
0
rm: cannot remove `xxx’: Operation not permitted

rm: cannot remove `xxx': Operation not permitted可以先用lsattr xxx查看文件的隐藏属性。如果看到-----a-------的情况,可以用chattr -a xxx去除a属性,然后再进行删除就可以了....

殘留回憶
29分钟前
0
0
oracle 如何查看当前用户的表空间名称

如何查询当前用户的表空间名称?因为oracle建立索引,需要知道当前用户的表空间,查找了一下资料 --查询语法-- select default_tablespace from dba_users where username='登录用户' 如,...

youfen
32分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部