转载请标明出处http://www.cnblogs.com/haozhengfei/p/d65ab6ccff684db729f44a947ac9e7da.html


决策树

1.什么是决策树

   决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性某个值域上的输出,而每个叶节点存放一个类别。
   使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶节点存放的类别作为决策结果。
 
   我们的决策树是一个分类的决策树,将我们的数据离散到各个不同的分类。
 
构建决策树的两个要求:
   1.选择需要的属性以及怎么给属性做分支(分裂属性),
   2.属性的前后(属性选择度量算法)。
 
决策树的构造关键是分裂属性 
    所谓分裂属性就是在某个节点处按照某一特征属性的不同划分构造不同的分支,其目标是让各个分裂子集尽可能地“纯”。尽可能“纯”就是尽量让一个分裂子集中待分类项属于同一类别。 
 
分裂属性分为三种不同的情况: 
 
 
   – 1、属性是离散值且不要求生成二叉决策树。此时用属性的每一个划分作为一个分支。
   – 2、属性是离散值且要求生成二叉决策树。此时使用属性划分的一个子集进行测试,按照“属于此子集”和“不属于此子集”分成两个分支。
   – 3、属性是连续值。此时确定一个值作为分裂点split_point,按照>split_point和<=split_point生成两个分支。

2.决策树中属性的选择顺序

属性的选择度量算法--决定哪一个属性应该排在前面(属性的选择顺序)
   ID3(原始的算法),C4.5(ID3衍生的算法)

ID3(原始的算法)

   ID3算法的核心思想:以信息增益度量属性选择,选择分裂后信息增益最大的属性进行分裂。
 
   熵:给了一个条件后,判断这个条件的信息增益,信息增益越大,表明熵锐减的越多,那么这个条件应该越往前排。
        Demo1:扔筛子的信息熵怎么求?
            (-1/6 * log1/6 + -1/6 * log1/6 + ...)

 
        Demo2:
 
 
 
    分别算出各个条件的信息增益,哪一个信息增益越大,则选择该特征属性的排序越靠前

C4.5(衍生的算法)

为什么会出现C4.5?
    ID3算法有一些弊端,比如某个属性下有10个分类,这10个分类每个分类都对应一个值,那么最后求得这一属性的熵为0,信息增益最大,就排在了其他属性的前面,这对于其他属性是不公平的,所以引入了C4.5,可以看做是ID3的升级版,C4.5比较的信息增益。
    比较信息增益率(每一属性的信息/这一属性下的类别),按照信息增益率的高低进行属性的排序。
 

3.决策树应用时需要注意的一些问题

决策树本身是一个弱分类器的算法,优点是可以做到多分类,但是应用时要考虑到"剪枝"
   1.树太高,容易造成计算量太大
   2.容易过拟合(准确率超过90%可能就过拟合了,小于70%拟合度不够),就是一个节点上面只有少数的样本,所以使用决策树经常需要降低深度,也就是"剪枝“
 

4.决策树升级版-->GBDT和随机森林

    随机森林:每次在全量样本中采取有放回的可以构建多棵决策树,随机森林的本质是采取一种投票的机制(比如随机森林中有15棵树,7棵树投票见面,8棵树投票不见面,那么最后的结果就是不见面)

MLlib--决策树的更多相关文章

  1. MLlib决策树与集成树

    决策树是一种常见的分类与回归机器学习算法,由于其模型表达性好,便于理解,并能取得较好的效果,而受到广泛的应用.下图是一个简单的决策树,决策树每个非叶子节点包含一个条件,对于具有连续值的特征,该条件为一 ...

  2. Spark2.0机器学习系列之3:决策树

    概述 分类决策树模型是一种描述对实例进行分类的树形结构. 决策树可以看为一个if-then规则集合,具有“互斥完备”性质 .决策树基本上都是 采用的是贪心(即非回溯)的算法,自顶向下递归分治构造. 生 ...

  3. Spark机器学习之MLlib整理分析

    友情提示: 本文档根据林大贵的<Python+Spark 2.0 + Hadoop机器学习与大数据实战>整理得到,代码均为书中提供的源码(python 2.X版本). 本文的可以利用pan ...

  4. 《大数据Spark企业级实战 》

    基本信息 作者: Spark亚太研究院   王家林 丛书名:决胜大数据时代Spark全系列书籍 出版社:电子工业出版社 ISBN:9787121247446 上架时间:2015-1-6 出版日期:20 ...

  5. Spark Mllib里决策树回归分析使用.rootMeanSquaredError方法计算出以RMSE来评估模型的准确率(图文详解)

    不多说,直接上干货! Spark Mllib里决策树二元分类使用.areaUnderROC方法计算出以AUC来评估模型的准确率和决策树多元分类使用.precision方法以precision来评估模型 ...

  6. Spark Mllib里决策树回归分析如何对numClasses无控制和将部分参数设置为variance(图文详解)

    不多说,直接上干货! 在决策树二元或决策树多元分类参数设置中: 使用DecisionTree.trainClassifier   见 Spark Mllib里如何对决策树二元分类和决策树多元分类的分类 ...

  7. Spark Mllib里决策树二元分类使用.areaUnderROC方法计算出以AUC来评估模型的准确率和决策树多元分类使用.precision方法以precision来评估模型的准确率(图文详解)

    不多说,直接上干货! Spark Mllib里决策树二元分类使用.areaUnderROC方法计算出以AUC来评估模型的准确率 具体,见 Hadoop+Spark大数据巨量分析与机器学习整合开发实战的 ...

  8. Spark MLlib机器学习(一)——决策树

    决策树模型,适用于分类.回归. 简单地理解决策树呢,就是通过不断地设置新的条件标准对当前的数据进行划分,最后以实现把原始的杂乱的所有数据分类. 就像下面这个图,如果输入是一大堆追求一个妹子的汉子,妹子 ...

  9. spark(1.1) mllib 源码分析(三)-决策树

    本文主要以mllib 1.1版本为基础,分析决策树的基本原理与源码 一.基本原理 二.源码分析 1.决策树构造 指定决策树训练数据集与策略(Strategy)通过train函数就能得到决策树模型Dec ...

  10. Spark Mllib里如何对决策树二元分类和决策树多元分类的分类数目numClasses控制(图文详解)

    不多说,直接上干货! 决策树二元分类的分类数目numClasses控制 具体,见 Hadoop+Spark大数据巨量分析与机器学习整合开发实战的第13章 使用决策树二元分类算法来预测分类Stumble ...

随机推荐

  1. python 小脚本升级-- 钉钉群聊天机器人

    一则小脚本(工作中用) 在这篇文章中写的监控的脚本,发送监控的时候 是利用的邮箱,其实在实际,邮箱查收有着不方便性,于是乎升级, 我们工作中,经常用钉钉,那么如果要是能用到钉钉多好,这样我们的监控成功 ...

  2. 论文笔记-Squeeze-and-Excitation Networks

    作者提出为了增强网络的表达能力,现有的工作显示了加强空间编码的作用.在这篇论文里面,作者重点关注channel上的信息,提出了"Squeeze-and-Excitation"(SE ...

  3. 关于vs2010下水晶报表的使用入门

    关于vs2010下使用水晶报表了解情况记录如下: 1.首先vs2010不再自带水晶报表控件了,需要下载安装vs2010配套的水晶报表控件:CRforVS_13_0.这个控件安装很简单,基本上都选择默认 ...

  4. Python学习_09_模块

    模块 模块是python中的最高组织单元,在物理层面上,模块以文件存储,模块的文件名就是模块的名字.py,每个模块都有自己的名称空间. python按照路径搜索来查找模块文件,在PYTHONPATH环 ...

  5. 每天学一点Docker(5)——了解Docker架构

    Docker的核心组件: 1.Docker客户端 - Client 2.Docker服务器 - Docker deamon 3.Docker镜像 - Image 4.仓库 - Registry 5.D ...

  6. python重试装饰器的简单实现

    简单实现了一个在函数执行出现异常时自动重试的装饰器,支持控制最多重试次数,每次重试间隔,每次重试间隔时间递增. 最新的代码可以访问从github上获取 https://github.com/black ...

  7. 基于vue2+vuex+vue-router+sass+webpack的网易云音乐

    [本博客为原创:http://www.cnblogs.com/HeavenBin/]  前言: 这段时间写的一个项目,供给大家互相学习,有什么疑问可以issues我. 源码地址:https://git ...

  8. JDK1.8中HashMap实现

    JDK1.8中的HashMap实现跟JDK1.7中的实现有很大差别.下面分析JDK1.8中的实现,主要看put和get方法. 构造方法的时候并没有初始化,而是在第一次put的时候初始化 putVal方 ...

  9. 自学Aruba之路

    自学Aruba之路[第一回]:体系结构    1.1 自学Aruba1.1-Aruba体系结构-产品线    1.2 自学Aruba1.2-WLAN一些基本常识    1.3 自学Aruba1.3-W ...

  10. SQL常用增删改查语句

    1增 1.1[插入单行]insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) values ('开心 ...