decision tree
时间:2022-07-22
本文章向大家介绍decision tree,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
什么是decision tree
决策树是一种基于监督的分类问题,主要将问题的条件构造为树的结构,依据判断划分数据集.decision tree 是一个流程图的树结构,其中,每一个内部结点表示一个属性上的测试,每一个分支代表一个属性的输出 决策树的算法就是一个构造树的过程,根据构造出来的树进行预测,他的测试集是必须知道结果的属于监督学习算法。
- 优点:简单,可以处理不相关的特征数据
- 缺点:可能会产生过度匹配
- 适用:数值和标称
决策树通常有三个步骤:特征选择、决策树的生成、决策树的修剪。
在划分的时候,为了要找到决定性的行情,我们必须评估每一个特征,找到具有决定性的特征,并根据这个特征进行数据集的分割。如果数据子集内的数据属于不同的类型,则需要重复进行划分。
算法
创建决策树的过程:
1.获得数据集最后结果的类别集合
classList = [example[-1] for example in dataset]
2.如果获得的结果集中的类别仅仅只有一个比如说都是男,那么直接按照统计结果分类
if classList.count(classList[0])==len(classList):
return classList[0]
3.结果集中有男有女,而且一行元素中只有最后一个元素,就按男女的个数谁,占优势来区分。
if len(dataSet[0])==1:
return majorityCnt(classList)
,传入为最后一列的类别集 实现majorityCnt统计分类的主要元素,确定结果 用字典来存储对应类别的个数,并排序,输出排序大的字典项的key值 4.选择最优的分类特征标签:
chooseBestFeatureToSplit(dataSet):传入数据集
将数据集一行的元素长度减一表示特征集个数,因为最后一个为结果 计算原始数据集的熵,计算公式,用熵来表示信息的复杂度,熵越大,信息的复杂度越大
计算熵的方法:
- 1.获取数据的总条数
numEntries=len(dataSet) # 数据条数
- 2.遍历获得每一条数据的最后一个类别,并统计个数,用字典存放,最后套用公式计算 初始化最好的特征标签位位-1 依次选取每一个特征标签,通过去除这一列,获得数据集,并计算器其熵值,并计算原始熵与分类后的差值。 判断差值最大的保存其位置,再次循环遍历完所有的特征值。
5.最优子标签以字典的形式保存,从特征标签列表中删除当前的标签
myTree={bestFeatLabel:{}} #分类结果以字典形式保存
del(labels[bestFeat])
6.获得最优特征值的那一列元素
featValues=[example[bestFeat] for example in dataSet]
进行遍历,再获得剩余的子标签列表 去除那个子标签,和分割数据后的子标签,进行迭代即可
for value in uniqueVals:
subLabels=labels[:]
#迭代递归创建
myTree[bestFeatLabel][value]=createTree(splitDataSet
(dataSet,bestFeat,value),subLabels)
划分数据的最大原则是将无序的数据变的有序。划分数据前后信息发生变化成为信息增益。
- Android中include标签的使用
- css3弹性盒子模型——回顾。
- confluence与jira账号对接、查看到期时间及问题总结
- 物联网、人工智能时代来临五大隐忧不可不提防
- Contact Manager Web API 示例[1]CRUD 操作
- 3个域名交易:fde.com11万被秒
- 新手指南OpenStack:Nova的基础知识
- Python-装饰器详解
- Contact Manager Web API 示例[2] Web API Routing
- Android一些关于分辨率和布局的设置
- log4net 中错误 System.Web.HttpException (0x80004005): 文件不存在
- Contact Manager Web API 示例[2] Web API Routing
- Python内置函数
- NET实现微信公共平台上传下载多媒体文件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 「Mysql索引原理(五)」多列索引
- 「Mysql索引原理(六)」聚簇索引
- 「Mysql索引原理(七)」覆盖索引
- 「Mysql索引原理(八)」使用索引扫描做排序
- 「Mysql索引原理(九)」前缀压缩索引
- 「Mysql索引原理(十)」冗余和重复索引
- 「Mysql索引原理(十一)」索引和锁
- 「Mysql索引原理(十二)」索引案例1-支持多种过滤条件
- 「Mysql索引原理(十三)」索引案例2-避免多个范围条件
- 「Mysql索引原理(十四)」索引案例3-优化排序
- 字符仿真
- 「Mysql索引原理(十五)」维护索引和表-修复损坏的表
- 「Mysql索引原理(十六)」维护索引和表-更新索引统计信息
- 「Mysql索引原理(十七)」维护索引和表-减少索引和数据的碎片
- 「通信框架Netty4 源码解读(一)」起步,关于IO的简单总结,模拟一个redis客户端