python实现决策树归纳_决策树【python实现】
决策树思维导图.jpg
0.周董歌词中的决策树
为什麼 别人在那看漫画 我却在学画画 对著钢琴说话
别人在玩游戏 我却靠在墙壁背我的ABC
拿王牌谈个恋爱 而我不想被你教坏
还是听妈妈的话吧 晚点再恋爱吧
长大後我开始明白 为什麼我 跑的比别人快 飞的比别人高
周董妈告诉我们,想跑的比别人快 飞的比别人高,就要学画画,练钢琴,背ABC,不要打游戏,早恋。这是成材的规则。决策树,就是这种规则的集合。
1.真正的决策树
在决策树中,一棵决策树包含一个根节点,若干个内部节点和若干个叶节点。
image.png
在《西瓜书》中提到,有三种情况会导致算法返回:
当前结点包含的样本全属于同一类别,无需划分。
当前属性集为空,或所有样本在所有属性上的取值相同,无法划分:把当前结点标记为叶节点,并将其类别设定为该结点所含样本最多的类别。
属性集为空的情况:假设有六个特征,六个特征全部用完发现,数据集中还是存在不同类别数据的情况。
当前特征值全都相同,在类别中有不同取值。
当前结点包含的样本集合为空,不能划分:将类别设定为父节点所含样本最多的类别。
出现这个情况的原因是:在生成决策树的过程中,数据按照特征不断的划分,很有可能在使用这个特征某一个值之前,已经可以判断包含该特征值的类别了。所以会出现空的情况。
2.划分选择
那么,在决策树中,怎么选择特征进行划分?以西瓜数据集为例。
西瓜数据集2.0镇楼
2.1信息增益
信息熵
用于度量样本集合的纯度,代表一个系统中蕴含信息量的多少,熵越小,信息量越少,纯度越高,不确定性就越小。单位为:比特或者纳特。
假定当前样本集合
中第
类样本所占比例为
,则
的信息熵,计算公式为(在《统计学习方法》中,也用
表示
):
信息熵极值公式推导
当样本
中
类样本均匀分布时,信息熵最大,
《统计学习方法》P60
当样本
中的
只有一个值的时候,信息熵最小
西瓜数据集中,“好瓜”标签下只有“是”与“否”,因此
,是好瓜的有8个,不是好瓜的有9个,所以信息熵为
条件熵
两个随机变量
、
可以形成联合熵
,条件熵为:表示
发生所包含的熵,去掉
单独发生的熵<=>在
条件发生的条件下,
发生所产生的熵。
理解:
则,在色泽条件下|Y|的条件增益为:
信息增益
大白话:要想知道随机变量
的信息增益,就要“用
本身的信息熵” 减掉 “在已知
情况下,随机变量
的信息熵”
含义:得知特征
的信息而使得类
的信息不确定性减少的程度。
色泽的信息增益计算过程
2.2 信息增益率
因为信息增益可能会更偏向于数目较多的属性,因此,用一个数放缩了一下,具体公式如下:
其中
IV举例
增益率对特征值较少的特征有一定偏好,因此 C4.5 算法选择特征的方法是先从候选特征中选出信息增益高于平均水平的特征,再从这些特征中选择增益率最高的。
2.3 基尼系数
2.3.1基尼值
反映了数据集中随机抽取两个样本,其类别标记不一致的概率,因此,基尼值越小,数据集的纯度越高。
2.3.2基尼系数
基尼系数
3. 剪枝
通过剪枝,可以有效防止决策树模型过拟合的问题。主要有一下两种剪枝方法:
预剪枝
后剪枝
3.1 预剪枝
在决策树生成过程中,对每个节点先进行估计,若当前及诶单的划分不能使决策树的泛化性能提升,则停止划分。
3.2 后剪枝
对一个完整的决策树,从底向上对非叶子节点进行分析,若将该子树替换为叶子结点能够提升决策树的泛化能力,则将该子树替换为叶子节点。
4.1 在所有数据集上未剪枝的决策树运行结果
西瓜书中有一处分类错误:
P78页图4.4
西瓜数据2.0计算结果
4.2 在训练集上未剪枝的运行结果
本文的运行结果与西瓜书不一致,原因在于在信息增益相同的情况下:(“脐部凹陷”处,gain(色泽)=gain(根蒂)),选取的划分特征不同。本文在“脐部凹陷”处选择的划分特征为根蒂,西瓜书选择的是“色泽”。
未剪枝的决策树
4.3 在训练集上使用“预剪枝”运行结果
预剪枝的决策树
5.小结
构建决策树过程中出现了以下问题:
在特征值划分部分
python列表深复制和浅复制的问题。
《西瓜书》中在算法描述部分提到的“从A中去掉
”是指在子树中去掉,并不是整棵树中不再用,所以在最终树的“触感”特征出现了两次
image.png
之前第三种导致算法返回的情况一直没有遇到。原因是,在特征选择时用到的是
feature_values = list(dataset[classify_feature].unique())
而非
feature_values = self.unique_value[classify_feature]
导致无法获取到第三种返回的特征值。
image.png
6. 参考:
7. 留疑
若特征值是连续变量怎么处理?
缺失值的处理方式
多变量决策树
脚注
已知集合D的信息熵为:
可以理解为在
和
的条件下
的最大值/最小值的问题。由拉格朗日算子可设
对
求导,可得
那么,对
求导则有
又因
,所以有
↩
python实现决策树归纳_决策树【python实现】相关推荐
- python决策树剪枝_决策树剪枝算法的python实现方法详解
python 决策树怎样修剪枝 剪枝是决策树停止分支的方法之一,剪枝有分预先剪枝和后剪枝两种.预先剪枝是在树的生长过程中设定一个指标,当达到该指标时就停止生长,这样做容易产生"爱已不在,却还 ...
- python二叉树遍历算法_分享python实现的二叉树定义与遍历
这篇文章主要介绍了python实现的二叉树定义与遍历算法,结合具体实例形式分析了基于Python定义的二叉树及其常用遍历操作实现技巧,需要的朋友可以参考下 本文实例讲述了python实现的二叉树定义与 ...
- python大数据论坛_干货 | Python+大数据计算平台,PyODPS架构手把手教你搭建
数据分析和机器学习 大数据基本都是建立在Hadoop系统的生态上的,其实一个Java的环境.很多人喜欢用Python和R来进行数据分析,但是这往往对应一些小数据的问题,或者本地数据处理的问题.如何将二 ...
- python的ai写作_使用Python创建AI比你想象的轻松
可能对AI领域,主要开发阶段,成就,结果和产品使用感兴趣.有数百个免费源和教程描述使用Python的AI.但是,没有必要浪费你的时间看他们.这里是一个详细的指南,你需要知道在使用Python构建人工智 ...
- python与算法社区_【Python算法】分类与预测——Python随机森林
[Python算法]分类与预测--Python随机森林 1.随机森林定义 随机森林是一种多功能的机器学习算法,能够执行回归和分类的任务.同时,它也是一种数据降维手段,在处理缺失值.异常值以及其他数据探 ...
- python大牛 关东升_《Python从小白到大牛》第4章 Python语法基础
本章主要为大家介绍Python的一些语法,其中包括标识符.关键字.常量.变量.表达式.语句.注释.模块和包等内容. 标识符和关键字 任何一种计算机语言都离不开标识符和关键字,因此下面将详细介绍Pyth ...
- python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议
<Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: <Python之禅>中对于Pyt ...
- python画交互式地图_使用Python构建交互式地图-入门指南
python画交互式地图 Welcome to The Beginner's Guide to Building Interactive Maps in Python 欢迎使用Python构建交互式地 ...
- python出现的意义_[转]Python中下划线以及命名空间的意义
Python 用下划线作为变量前缀和后缀指定特殊变量/方法. 主要存在四种情形 1. 1. object # public 2. __object__ # special, python system ...
最新文章
- 第三届“达观杯”文本智能信息抽取挑战赛丰厚奖金,群英集结,等你来战!...
- 这样给学妹讲原码、反码、补码,帮她彻底解决困扰了三天的问题
- 《Spark大数据分析:核心概念、技术及实践》一3.5 API
- springmvc跨域问题
- 推荐系统——GBDT+LR
- UVA - 213 Message Decoding
- ubuntu安装python_与你分享Ubuntu修改源和安装pycharm
- redis系列:redis介绍与安装
- centOS6.4部署svn
- 机器学习之邹博笔记1
- 现代数字图像处理作业———对lena图像进行简单处理
- 创建菜单与游戏界面(下)
- 计算机类专业都有什么区别?
- Discovery and auto register
- 靠查看英语资料 , “一不小心”成了国内第一
- android 视频剪辑工具,视频剪辑工具手机版
- MediaPlayer源码分析
- 用Python自动批量提取Tableau报表数据源中用的数据库表
- 数据模型建设步骤总结
- SqlServer遇到以零作除数错误
热门文章
- html5 can,基于html5 can-vas实现漫天飞雪效果实例
- java batch size_java – @BatchSize但在@ManyToOne案例中有很多往返
- weka使用训练集分类测试集_Giao 13C NMR计算分类训练集提高结构归属的准确性和可靠性...
- workbench提示工作负载高度不平衡_功率因数负载组
- dbgrideh显示备注数据类型文本
- 机器数,原码,反码,补码,移码
- 构建自己的PHP框架--构建缓存组件(2)
- WINCE快捷方式详解
- 开启Python之路
- NYOJ 214 最长上升子序列nlogn