首先通过两个图来引入什么是决策树。

是否学习的决策过程

决策树是仿树结构来进行决策的,例如上图来说,我们要对‘是否学习’这个问题进行决策时,通常伴随一系列的子决策。先看是否有‘对象’,有的话是否需要‘陪伴对象’,通过一次次子决策后得到最终决策:是否学习。

一般情况下,一棵决策树包含一个根节点,若干内部节点和若干叶节点,如下图所示,那么与是否学习的决策过程对应起来,‘女票’为根节点,'陪女友'和‘任务’‘吃鸡’为内部节点,最下面一层为叶子节点。

决策树节点图

决策树算法第一种常见的机器学习方法,常用于分类任务中,从给定的训练数据集中学习到一个模型用于对新示例进行分类。决策树需要两部分数据:

训练数据:用于构造决策树,即决策机制

测试数据:验证所构造决策树的错误率

下面给出决策树学习算法伪代码:

决策树学习算法伪代码

下面我们以一个具体的小实例来讲解决策树算法

数据为一个简单的判别生物是否为鱼类的数据集,通过对下面数据进行分析,建立决策树。

序号

不浮出水面是否可以生存

是否有脚蹼

属于鱼类

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. 决策树分析例题经典案例_决策树例题分析及解答

    决策树例题分析及解答 1,例: 某农业企业有耕地面积33.333公顷,可供灌水量6300立方米,在生产忙季可供工作日2800个,用于种植玉米.棉花和花生三种作物.预计三种作物每公顷在用水忙季用工日数. ...

  2. 决策树分析例题经典案例_8决策树例题解析.ppt

    8决策树例题解析,决策树例题经典案例,决策树例题,决策树算法例题,管理学决策树算法例题,决策树例题及答案,决策树分析法例题,决策树法例题,管理学决策树例题,决策树计算例题及答案 例: 某农业企业有耕地 ...

  3. 决策树分析例题经典案例_机器学习决策树2个经典案例

    [实例简介] 机器学习决策树 [实例截图] [核心代码] import operator from math import log import matplotlib.pyplot as plt de ...

  4. c#圆的周长和面积面向对象_初遇C#:一个简单的小程序(圆形周长,面积计算器)...

    作为一个面向对象的语言,与用户的交互很关键! 在此,我们可以先分析一下我们这个小程序要与用户交互的内容: 1.命名很重要,让用户看见这个程序就知道这个程序的作用. 2.当用户打开这个程序时,提示用户输 ...

  5. 用python做简单的地理聚类分析案例_用Python做一个简单的翻译工具

    编程本身是跟年龄无关的一件事,不论你现在是十四五岁,还是四五十岁,如果你热爱它,并且愿意持续投入其中,必定会有所收获. 本文就来自编程教室一位"小"读者的投稿(互助学习1群里的同学 ...

  6. 分层结构的生活例子_层次分析法经典案例

    层次分析法经典案例 篇一:层次分析法步骤 层次分析法实例与步骤 结合一个具体例子,说明层次分析法的基本步骤和要点. [案例分析] 市政工程项目建设决策: 层次分析法问题提出 市政部门管理人员需要对 修 ...

  7. 【vue2.0进阶】案例:用Vuex实现一个简单的计算器

    昨天我们学习了Veux的几个重要的核心概念.当然只讲概念还不够,必须要结合上案例才能理解得更深刻. 马上就开始我们今天的案例:用Vuex实现一个简单的网页计算器. 我们之前的章节说过,Vuex适合在较 ...

  8. python决策树案例_决策树案例:基于python的商品购买能力预测系统

    1 决策树/判定树(decision tree) 1 决策树(Dicision Tree)是机器学习有监督算法中分类算法的一种,有关机器学习中分类和预测算法的评估主要体现在:准确率:预测的准确与否是本 ...

  9. 韩顺平 javascript教学视频_学习笔记20_多态经典案例_补讲闭包细节

    多态经典案例 经典案例,看代码: <html> <head> <script language="javascript"> function M ...

最新文章

  1. ControlButton按钮事件
  2. 幸运数字Ⅱ(树型结构构造答案,打表)难度⭐⭐
  3. 【LDA学习系列】神奇的Gama函数Python代码
  4. 部署支持php和Redis的Nginx服务器
  5. 嵌入式设计与开发实践要点[1.2]-嵌入式系统的内核
  6. MySQL内存管理,内存分配器和操作系统
  7. 在zabbix中添加监控主机及Items
  8. 服务器安装mysql_阿里云服务器上安装MySQL
  9. 快递下单后取消订单_网约车定位地点不动,男子别的平台下单,没取消订单要付6.6元...
  10. 博士面试被拒,只因第一学历非985、211...
  11. 【LeetCode】【HOT 100】2. 两数相加
  12. IllegalStateException: Error reading delta file hdfs://xxx/spark/xx/state/0/11/1.delta
  13. C语言之运算符优先级(四十二)
  14. 声音存储空间计算公式_音频文件存储容量计算
  15. 从苏宁电器到卡巴斯基(第二部)第08篇:我在卡巴的日子 VIII
  16. fastapi框架tortoise-orm运用
  17. FF系列重要Staff全列表 (转自天幻网)
  18. web.py中通过POST接收Json数据解析的bug
  19. 苹果用户当心 犯罪分子网购海外邮箱专偷苹果ID
  20. EBS 打印机设置——PASTA

热门文章

  1. python四种占位符例子_python占位符输入方式实例
  2. 论HAL层、FDL层、FTL层的参数传递
  3. Fight with Monsters
  4. [网络安全学习篇8]:PKI(千峰网络安全视频笔记 8 day)
  5. 满足你们的好奇心,公开说一下我的微信公众号
  6. Python学习--Day06--面向对象(2)
  7. 国产上新!芯驰D9多核Cortex-A55核心板,国产车规级平台
  8. Rasa 3.x 学习系列-Rasa [3.5.8] -2023-05-12新版本发布
  9. 文字颜色由左到右逐渐变色,简单做法
  10. python 输入纯数字