Python机器学习(二):决策树(Decision Tree-DTs)

目录:

  • Python机器学习(二):决策树(Decision Tree-DTs)
  • 一、什么是决策树
    • 1.基本概念
    • 2.决策树算法的核心问题
    • 3.决策树的优缺点
  • 二、决策树的原理
    • 1.ID3 算法
      • 1.1 ID3 算法步骤
      • 1.2 信息熵、条件熵和信息增益
    • 2.C4.5 算法
      • 2.1 信息增益率
      • 2.2 C4.5 剪枝
      • 2.3 C4.5 算法的缺点
    • 3.CART 算法
      • 3.1 CART 算法介绍
      • 3.2 分类问题——基尼指数(Gini)
      • 3.3 回归问题——均方差
      • 3.4 CART 剪枝步骤
    • 4.决策树算法差异总结
  • 三、决策树的sklearn实现
    • 1.sklearn中的决策树类
    • 2.分类决策树
      • 2.1 构建一棵分类决策树
      • 2.2 可视化
      • 2.3 剪枝参数
      • 2.4 确定最优的剪枝参数
    • 3.回归决策树
      • 3.1 构建一棵回归决策树
      • 3.2 交叉验证
  • 四、案例:泰坦尼克号幸存者预测

一、什么是决策树

1.基本概念

决策树是一种用于分类和回归的非参数有监督学习方法,其目标是创建一个模型,通过学习从数据特性中推断出的简单决策规则来预测目标变量的值,决策树算法,简单来说,就是一系列的 if...then...else 组合

如表所示:

名称 体温 表皮 胎生 水生生物 飞行生物 标签
人类 恒温 毛发 哺乳类
鲸鱼 恒温 毛发 哺乳类
鸽子 恒温 羽毛 鸟类
海龟 冷血 鳞片 爬行类
蝾螈 冷血 两栖类
蜘蛛

如果目标是对哺乳类和非哺乳类进行分类,则根据上表建立的决策树模型:


决策树的决策过程就是从根节点开始,测试待分类项中对应的特征属性,并按照其值选择输出分支,直到叶子节点,将叶子节点的存放的类别作为决策结果

建立决策树模型的一般步骤: (一)特征选择、(二)决策树的生成、(三)决策树的修剪

2.决策树算法的核心问题

  1. 如何从数据表中找出最佳节点和最佳分枝
    数据表中有很多属性/特征,如何选择特征和特征的顺序来构建性能最佳的决策树?
  2. 如何让决策树停止生长,防止过拟合
    为了尽可能正确地分类训练集,决策数会为所有属性都建立节点,这样就可能对训练样本学习得“太好”了,把训练样本的一些特点当做所有数据都具有的一般性质,从而导致过拟合
    解决过拟合问题,我们需要对决策树进行剪枝处理

3.决策树的优缺点

  • 优点:
    1.易于理解和解释,决策树可以被可视化
    2.几乎不需要数据准备,其他算法通常需要数据标准化,需要创建虚拟变量并删除缺失值
    3.可自动忽略目标变量没有贡献的属性变量,也为判断属性变量的重要性,减少变量的数目提供参考
  • 缺点:
    1.容易造成过拟合,需要采用剪枝操作
    2.忽略了数据之间的相关性
    3.对于各类别样本数量不一致的数据,信息增益会偏向于那些更多数值的特征

二、决策树的原理

样本集的纯度:

  • 如果将一个数据集按照某一属性的不同值分别划分为 D1D_1D1​ 和 D2D_2D2​ 两个样本集,发现按照该属性划分出来的样本集中,D1D_1D1​ 中的每个样本几乎都偏向于某一类 000,而 D2D_2D2​ 中的每个样本几乎都偏向于另一类 111,则划分出的样本集 D1D_1D1​ 和 D2D_2D2​ 的纯度很高——可以说明按照该属性来划分样本,可以将数据集的类别区分开来;
  • 因此样本纯度越高,决策树的拟合效果越好
  • 如果将一个数据集按照某一属性的不同值分别划分为 D1D_1D1​ 和 D2D_2D2​ 两个样本集,发现在划分前和划分后,样本类别的分布情况几乎不变——则说明按照该属性来划分样本,对样本类别分布的影响不大,说明不能以该属性来将数据集的类别区分开来,样本纯度仍然很低;
  • 因此样本纯度越低,决策树的拟合效果越差

因此,选择哪一个属性来构建决策树的节点,关键就在于该属性能否使数据集的纯度变大!

建立决策树的关键,即在当前状态下选择哪个属性作为分类依据,根据不同的目标函数,建立决策树主要有以下三种算法:

  • ID3(Iterative Dichotomiser)
  • C4.5、C5.0
  • CART(Classification And Regression Tree)
算法 支持场景 树结构 特征选择 连续值处理 缺失值处理 剪枝 特征属性多次使用
ID3 分类 多叉树 信息增益 不支持 不支持 不支持 不支持
C4.5 分类 多叉树 信息增益率 支持 支持 支持 不支持
CART 分类、回归 二叉树 基尼指数均方差 支持 支持 支持 支持

1.ID3 算法

  • ID3 算法的核心是信息熵,期望信息越少,信息熵越大,样本纯度越低,决策树对训练集的拟合度越差;期望信息越多,信息熵越小,样本纯度越高,决策树对训练集的拟合度越好。而熵越小,信息增益越大
  • ID3 算法计算每个属性的信息增益,并利用信息增益作为决策树每级节点属性的选择标准

1.1 ID3 算法步骤

  1. 准备好训练集特征和训练集数据
  2. 计算数据集合的信息熵和所有特征的条件熵,选择信息增益最大的特征作为决策树当前最优决策节点
  3. 删除上一步已使用的特征/属性,并按照已构建的决策树节点,将训练集数据分类
  4. 分析分类效果,决定是否重复 2,3 两步;若最后子集值包含单一特征,则为分支叶子节点

1.2 信息熵、条件熵和信息增益

Python机器学习(二):决策树(Decision Tree-DTs)相关推荐

  1. 机器学习(五)决策树(decision tree)

    决策树(decision tree)(一)--构造决策树方法 决策树算法起源于E.B.Hunt等人于1966年发表的论文"experiments in Induction",但真正 ...

  2. 一文速学数模-分类模型(二)决策树(Decision Tree)算法详解及python实现

    目录 一.决策树概述 二.工作原理及特点 三.决策树的构造 四.信息增益

  3. 【机器学习算法-python实现】决策树-Decision tree(1) 信息熵划分数据集

    1.背景 决策书算法是一种逼近离散数值的分类算法,思路比较简单,而且准确率较高.国际权威的学术组织,数据挖掘国际会议ICDM  (the IEEE International Conference o ...

  4. 【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现

    1.背景      接着上一节说,没看到请先看一下上一节关于数据集的划分数据集划分.现在我们得到了每个特征值得信息熵增益,我们按照信息熵增益的从大到校的顺序,安排排列为二叉树的节点.数据集和二叉树的图 ...

  5. 机器学习:决策树(Decision Tree)介绍

    简介 决策树是一种常见的机器学习算法,它的实现方式类似于我们平时利用多个不同权重选择做决策的过程.以下介绍一个现实生活中的例子. 当父母给自己的女儿介绍对象时,女儿往往会根据对方的年龄.富贵.高矮.美 ...

  6. 机器学习笔记——决策树(Decision Tree)(1)

    决策树 1.引入   1.1定义 决策树,顾名思义,就是帮我们做出决策的树.现实生活中我们往往会遇到各种各样的抉择,把我们的决策过程整理一下,就可以发现,该过程实际上就是一个树的模型.比如相亲的时候: ...

  7. 机器学习:决策树(Decision Tree)--ID3算法

    决策树的主要算法 构建决策树的关键:按照什么样的次序来选择变量(属性/特征)作为分类依据. 根据不同的目标函数,建立决策树主要有以下三种算法 ID3(J.Ross Quinlan-1975) 核心:信 ...

  8. 【机器学习实验二】决策树(Decision Tree)及其在图像识别任务上的应用

    经典有监督学习算法:决策树(Decision Tree) --本篇博客的决策树算法以及实验仅针对分类问题 文章目录 经典有监督学习算法:决策树(Decision Tree) 1.算法简介 2.算法思想 ...

  9. 机器学习算法实践:决策树 (Decision Tree)(转载)

    前言 最近打算系统学习下机器学习的基础算法,避免眼高手低,决定把常用的机器学习基础算法都实现一遍以便加深印象.本文为这系列博客的第一篇,关于决策树(Decision Tree)的算法实现,文中我将对决 ...

  10. [机器学习笔记] (四)决策树 Decision Tree

    (四)决策树 Decision Tree 基本概念 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性 ...

最新文章

  1. 什么是回归分析(regression analysis)?有哪些类型的回归分析(regression analysis)?
  2. 谷歌大改Transformer注意力,速度、内存利用率都提上去了
  3. Vivado中set_clock_groups时钟约束的使用
  4. 北京科技大学转专业到计算机,北科大学生全可转专业
  5. boost::mpl模块实现unique相关的测试程序
  6. 二十四种设计模式:备忘录模式(Memento Pattern)
  7. scala to java_Scala 2.13 以后Java集合与Scala集合互相转换
  8. 谷歌2007年上交大考试最后一题解答
  9. latex 无穷_《天龙3D》新资料片“骑乐无穷”即将上线
  10. python调用jar 性能_亲自有效---python 调用jar
  11. 【Linux笔记(000) 】-- 系统启动过程
  12. 程序员兄弟姐妹们 飞秋 回来时逢春节
  13. 20个使用Bootstrap制作的前端框架网站案例
  14. QQ空间自动评论自动转发 微博自动自动转发神器带源码(超简单) 升级版
  15. tensorflow获取动态shape
  16. 密码管理器(PM)安全机制和问题研究
  17. (素材源码)猫猫学IOS(十八)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复
  18. 复旦经管院李若山教授故事摘要
  19. 最新版本 release版本 ceph分布式存储搭建(rook-1.8.6)
  20. Matlab sound函数播放与停止播放音频

热门文章

  1. 基金买卖波段指标 主图 源码 效果图
  2. python夯实基础日记-类详解
  3. sqlmap工具说明
  4. 20210318 东南大学电气工程学院毕业分布--可视化地图
  5. 企业微信服务商扫码登录
  6. 2021-06-11 智能汽车和自动驾驶行业人才状态初探
  7. 怎么去除百度网盟推广广告
  8. android 插入 百度移动联盟 banner广告,百度移动应用广告盟联ane使用教程.docx
  9. 使用woo 语言开发 sockets4 sockets5 http https代理完整记录
  10. 面对物联网安全隐患高墙,熵核科技如何实现突围