决策树分析例题经典案例_决策树原理及一个简单的小例子
首先通过两个图来引入什么是决策树。
是否学习的决策过程
决策树是仿树结构来进行决策的,例如上图来说,我们要对‘是否学习’这个问题进行决策时,通常伴随一系列的子决策。先看是否有‘对象’,有的话是否需要‘陪伴对象’,通过一次次子决策后得到最终决策:是否学习。
一般情况下,一棵决策树包含一个根节点,若干内部节点和若干叶节点,如下图所示,那么与是否学习的决策过程对应起来,‘女票’为根节点,'陪女友'和‘任务’‘吃鸡’为内部节点,最下面一层为叶子节点。
决策树节点图
决策树算法第一种常见的机器学习方法,常用于分类任务中,从给定的训练数据集中学习到一个模型用于对新示例进行分类。决策树需要两部分数据:
训练数据:用于构造决策树,即决策机制
测试数据:验证所构造决策树的错误率
下面给出决策树学习算法伪代码:
决策树学习算法伪代码
下面我们以一个具体的小实例来讲解决策树算法
数据为一个简单的判别生物是否为鱼类的数据集,通过对下面数据进行分析,建立决策树。
序号
不浮出水面是否可以生存
是否有脚蹼
属于鱼类
1
是
是
是
2
是
是
是
3
是
否
否
4
否
是
否
5
否
否
否
第一步是数据处理
def Dataset():
data=[[1,1,'yes'],[1,1,'yes'],[1,0,'no'],[0,1,'no'],[0,0,'no']] #数据集
labels=['no surfacing','flipper']
return data,labels
def splitdata(dataset,row,label): #按照特定属性划分数据集
Dataset=[]
for data in dataset:
if data[row]==label:
reducedata=data[:row]
reducedata.extend(data[row+1:])
Dataset.append(reducedata)
return Dataset
伪代码的第8行是决策树建模很关键的一步,那么如何选择最优划分属性的呢?我们希望伴随着划分过程进行时,决策树分支节点所包含 样本尽可能属于同一类别,即节点的纯度越来越高。一般常用方法是利用信息增益。
在介绍信息增益之前先引入一个概念--信息熵
信息熵
信息熵
Ent(D)就是信息熵,其中pk为样本集合D中第k类样本所占比例,Ent(D)的值越小,就代表该样本集D的纯度越高。
信息增益
信息增益
假设属性a有V个可能取值,那么用a来对样本集进行划分,就会产生V个分支节点,Dv是第v个分支所包含的样本。上式就可计算出用属性a对样本集D进行划分所获得的信息增益。信息增益越大,用属性a对样本进行划分的纯度越高。所以选择使得信息增益最大的属性进行划分。具体代码实现如下:
def shannonEnt(dataset): #计算信息熵
lens=len(dataset)
count={}
for data in dataset:
key=data[-1]
count[key]=count.get(key,0)+1
Ent=0
for key in count:
prob=count[key]/lens
Ent-=prob*log(prob,2)
return Ent
def choosefeature(dataset): #选择最优划分属性
lens=len(dataset[0])-1
bestfeature=-1
entropy=shannonEnt(dataset)
bestInfo=0
for i in range(lens):
featurelist=set([example[i] for example in dataset])
Newentropy=0
for j in featurelist:
Data=splitdata(dataset,i,j)
Prob=len(Data)/len(dataset)
Newentropy-=Prob*shannonEnt(Data)
infoGain=entropy+Newentropy
if(infoGain>bestInfo):
bestInfo=infoGain
bestfeature=i
return bestfeature
下面就开始构建决策树并进行测试:
def createtree(dataset,labels):
classlist=[example[-1] for example in dataset]
if classlist.count(classlist[0])==len(classlist): #类别相同停止划分
return classlist[0]
bestfeature=choosefeature(dataset)
bestlabel=labels[bestfeature]
myTree={bestlabel:{}}
del(labels[bestfeature])
tags=set([example[bestfeature] for example in dataset]) #得到列表所包含的所有属性
for tag in tags:
myTree[bestlabel][tag]=creattree(splitdata(dataset,bestfeature,tag),labels)
return myTree
print(createtree(data,labels))#打印树结构
def classify(data,labels,test): #测试
first = list(data.keys())[0]
second = data[first] # {0: 'no', 1: {'flipper': {0: 'no', 1: 'yes'}}}
featIndex = labels.index(first) # 0
for key in second.keys():
if test[featIndex]==key:
if type(second[key]).__name__=='dict':
classlabel=classify(second[key],labels,test)
else:
classlabel=second[key]
return classlabel
以上为我对决策树的理解,如有错误,请指正。
决策树分析例题经典案例_决策树原理及一个简单的小例子相关推荐
- 决策树分析例题经典案例_决策树例题分析及解答
决策树例题分析及解答 1,例: 某农业企业有耕地面积33.333公顷,可供灌水量6300立方米,在生产忙季可供工作日2800个,用于种植玉米.棉花和花生三种作物.预计三种作物每公顷在用水忙季用工日数. ...
- 决策树分析例题经典案例_8决策树例题解析.ppt
8决策树例题解析,决策树例题经典案例,决策树例题,决策树算法例题,管理学决策树算法例题,决策树例题及答案,决策树分析法例题,决策树法例题,管理学决策树例题,决策树计算例题及答案 例: 某农业企业有耕地 ...
- 决策树分析例题经典案例_机器学习决策树2个经典案例
[实例简介] 机器学习决策树 [实例截图] [核心代码] import operator from math import log import matplotlib.pyplot as plt de ...
- c#圆的周长和面积面向对象_初遇C#:一个简单的小程序(圆形周长,面积计算器)...
作为一个面向对象的语言,与用户的交互很关键! 在此,我们可以先分析一下我们这个小程序要与用户交互的内容: 1.命名很重要,让用户看见这个程序就知道这个程序的作用. 2.当用户打开这个程序时,提示用户输 ...
- 用python做简单的地理聚类分析案例_用Python做一个简单的翻译工具
编程本身是跟年龄无关的一件事,不论你现在是十四五岁,还是四五十岁,如果你热爱它,并且愿意持续投入其中,必定会有所收获. 本文就来自编程教室一位"小"读者的投稿(互助学习1群里的同学 ...
- 分层结构的生活例子_层次分析法经典案例
层次分析法经典案例 篇一:层次分析法步骤 层次分析法实例与步骤 结合一个具体例子,说明层次分析法的基本步骤和要点. [案例分析] 市政工程项目建设决策: 层次分析法问题提出 市政部门管理人员需要对 修 ...
- 【vue2.0进阶】案例:用Vuex实现一个简单的计算器
昨天我们学习了Veux的几个重要的核心概念.当然只讲概念还不够,必须要结合上案例才能理解得更深刻. 马上就开始我们今天的案例:用Vuex实现一个简单的网页计算器. 我们之前的章节说过,Vuex适合在较 ...
- python决策树案例_决策树案例:基于python的商品购买能力预测系统
1 决策树/判定树(decision tree) 1 决策树(Dicision Tree)是机器学习有监督算法中分类算法的一种,有关机器学习中分类和预测算法的评估主要体现在:准确率:预测的准确与否是本 ...
- 韩顺平 javascript教学视频_学习笔记20_多态经典案例_补讲闭包细节
多态经典案例 经典案例,看代码: <html> <head> <script language="javascript"> function M ...
最新文章
- ControlButton按钮事件
- 幸运数字Ⅱ(树型结构构造答案,打表)难度⭐⭐
- 【LDA学习系列】神奇的Gama函数Python代码
- 部署支持php和Redis的Nginx服务器
- 嵌入式设计与开发实践要点[1.2]-嵌入式系统的内核
- MySQL内存管理,内存分配器和操作系统
- 在zabbix中添加监控主机及Items
- 服务器安装mysql_阿里云服务器上安装MySQL
- 快递下单后取消订单_网约车定位地点不动,男子别的平台下单,没取消订单要付6.6元...
- 博士面试被拒,只因第一学历非985、211...
- 【LeetCode】【HOT 100】2. 两数相加
- IllegalStateException: Error reading delta file hdfs://xxx/spark/xx/state/0/11/1.delta
- C语言之运算符优先级(四十二)
- 声音存储空间计算公式_音频文件存储容量计算
- 从苏宁电器到卡巴斯基(第二部)第08篇:我在卡巴的日子 VIII
- fastapi框架tortoise-orm运用
- FF系列重要Staff全列表 (转自天幻网)
- web.py中通过POST接收Json数据解析的bug
- 苹果用户当心 犯罪分子网购海外邮箱专偷苹果ID
- EBS 打印机设置——PASTA
热门文章
- python四种占位符例子_python占位符输入方式实例
- 论HAL层、FDL层、FTL层的参数传递
- Fight with Monsters
- [网络安全学习篇8]:PKI(千峰网络安全视频笔记 8 day)
- 满足你们的好奇心,公开说一下我的微信公众号
- Python学习--Day06--面向对象(2)
- 国产上新!芯驰D9多核Cortex-A55核心板,国产车规级平台
- Rasa 3.x 学习系列-Rasa [3.5.8] -2023-05-12新版本发布
- 文字颜色由左到右逐渐变色,简单做法
- python 输入纯数字