Python机器学习(二):决策树(Decision Tree-DTs)
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.决策树算法的核心问题
- 如何从数据表中找出最佳节点和最佳分枝
数据表中有很多属性/特征,如何选择特征和特征的顺序来构建性能最佳的决策树? - 如何让决策树停止生长,防止过拟合
为了尽可能正确地分类训练集,决策数会为所有属性都建立节点,这样就可能对训练样本学习得“太好”了,把训练样本的一些特点当做所有数据都具有的一般性质,从而导致过拟合
解决过拟合问题,我们需要对决策树进行剪枝处理
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 算法步骤
- 准备好训练集特征和训练集数据
- 计算数据集合的信息熵和所有特征的条件熵,选择信息增益最大的特征作为决策树当前最优决策节点
- 删除上一步已使用的特征/属性,并按照已构建的决策树节点,将训练集数据分类
- 分析分类效果,决定是否重复 2,3 两步;若最后子集值包含单一特征,则为分支叶子节点
1.2 信息熵、条件熵和信息增益
Python机器学习(二):决策树(Decision Tree-DTs)相关推荐
- 机器学习(五)决策树(decision tree)
决策树(decision tree)(一)--构造决策树方法 决策树算法起源于E.B.Hunt等人于1966年发表的论文"experiments in Induction",但真正 ...
- 一文速学数模-分类模型(二)决策树(Decision Tree)算法详解及python实现
目录 一.决策树概述 二.工作原理及特点 三.决策树的构造 四.信息增益
- 【机器学习算法-python实现】决策树-Decision tree(1) 信息熵划分数据集
1.背景 决策书算法是一种逼近离散数值的分类算法,思路比较简单,而且准确率较高.国际权威的学术组织,数据挖掘国际会议ICDM (the IEEE International Conference o ...
- 【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现
1.背景 接着上一节说,没看到请先看一下上一节关于数据集的划分数据集划分.现在我们得到了每个特征值得信息熵增益,我们按照信息熵增益的从大到校的顺序,安排排列为二叉树的节点.数据集和二叉树的图 ...
- 机器学习:决策树(Decision Tree)介绍
简介 决策树是一种常见的机器学习算法,它的实现方式类似于我们平时利用多个不同权重选择做决策的过程.以下介绍一个现实生活中的例子. 当父母给自己的女儿介绍对象时,女儿往往会根据对方的年龄.富贵.高矮.美 ...
- 机器学习笔记——决策树(Decision Tree)(1)
决策树 1.引入 1.1定义 决策树,顾名思义,就是帮我们做出决策的树.现实生活中我们往往会遇到各种各样的抉择,把我们的决策过程整理一下,就可以发现,该过程实际上就是一个树的模型.比如相亲的时候: ...
- 机器学习:决策树(Decision Tree)--ID3算法
决策树的主要算法 构建决策树的关键:按照什么样的次序来选择变量(属性/特征)作为分类依据. 根据不同的目标函数,建立决策树主要有以下三种算法 ID3(J.Ross Quinlan-1975) 核心:信 ...
- 【机器学习实验二】决策树(Decision Tree)及其在图像识别任务上的应用
经典有监督学习算法:决策树(Decision Tree) --本篇博客的决策树算法以及实验仅针对分类问题 文章目录 经典有监督学习算法:决策树(Decision Tree) 1.算法简介 2.算法思想 ...
- 机器学习算法实践:决策树 (Decision Tree)(转载)
前言 最近打算系统学习下机器学习的基础算法,避免眼高手低,决定把常用的机器学习基础算法都实现一遍以便加深印象.本文为这系列博客的第一篇,关于决策树(Decision Tree)的算法实现,文中我将对决 ...
- [机器学习笔记] (四)决策树 Decision Tree
(四)决策树 Decision Tree 基本概念 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性 ...
最新文章
- 什么是回归分析(regression analysis)?有哪些类型的回归分析(regression analysis)?
- 谷歌大改Transformer注意力,速度、内存利用率都提上去了
- Vivado中set_clock_groups时钟约束的使用
- 北京科技大学转专业到计算机,北科大学生全可转专业
- boost::mpl模块实现unique相关的测试程序
- 二十四种设计模式:备忘录模式(Memento Pattern)
- scala to java_Scala 2.13 以后Java集合与Scala集合互相转换
- 谷歌2007年上交大考试最后一题解答
- latex 无穷_《天龙3D》新资料片“骑乐无穷”即将上线
- python调用jar 性能_亲自有效---python 调用jar
- 【Linux笔记(000) 】-- 系统启动过程
- 程序员兄弟姐妹们 飞秋 回来时逢春节
- 20个使用Bootstrap制作的前端框架网站案例
- QQ空间自动评论自动转发 微博自动自动转发神器带源码(超简单) 升级版
- tensorflow获取动态shape
- 密码管理器(PM)安全机制和问题研究
- (素材源码)猫猫学IOS(十八)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复
- 复旦经管院李若山教授故事摘要
- 最新版本 release版本 ceph分布式存储搭建(rook-1.8.6)
- Matlab sound函数播放与停止播放音频