决策树分析例题经典案例_决策树原理及一个简单的小例子[通俗易懂]

决策树分析例题经典案例_决策树原理及一个简单的小例子[通俗易懂]首先通过两个图来引入什么是决策树。是否学习的决策过程决策树是仿树结构来进行决策的,例如上图来说,我们要对‘是否学习’这个问题进行决策时,通常伴随一系列的子决策。先看是否有‘对象’,有的话是否需要‘陪伴对象’,通过一次次子决策后得到最终决策:是否学习。一般情况下,一棵决策树包含一个根节点,若干内部节点和若干叶节点,如下图所示,那么与是否学习的决策过程对应起来,‘女票’为根节点,’陪女友’和‘任务’‘…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

决策树分析例题经典案例_决策树原理及一个简单的小例子[通俗易懂]

是否学习的决策过程

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

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

决策树分析例题经典案例_决策树原理及一个简单的小例子[通俗易懂]

决策树节点图

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

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

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

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

决策树分析例题经典案例_决策树原理及一个简单的小例子[通俗易懂]

决策树学习算法伪代码

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

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

序号

不浮出水面是否可以生存

是否有脚蹼

属于鱼类

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

以上为我对决策树的理解,如有错误,请指正。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196163.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IT人力外包越来越流行的原因剖析[通俗易懂]

    IT人力外包越来越流行的原因剖析[通俗易懂]近年来,互联网快速深入我们生活工作的每个角落,it人才成为各大企业争先抢夺的香饽饽,而通过it人力外包引进互联网软件人才已经成为一种趋势,那么越来越多的企业选择与it人力外包公司合作的原因是什么呢?首先选择与it人力外包公司合作,用人单位不需要聘请专门人员或者成立专门部门对it外包人员进行人力资源管理,这些it外包人员的聘用、工资、奖金的发放、社会保险等都是由it人力外包公司负责完成,这使得企业有更多的精力来经营其他业务。其次,it人力外包的用人方式非常灵活,可以化解人员编制限制与业务快速.

    2022年5月19日
    52
  • 如何在CentOS上配置虚拟IP地址 (VIP)

    如何在CentOS上配置虚拟IP地址 (VIP)目录介绍教程第1步第2步第3步第4步第5步本教程将指导您如何在服务器上配置虚拟IP地址。介绍顾名思义,虚拟IP地址(VIP)是一个没有实际物理网络接口的IP地址。传入的数据包被发送到VIP,但所有数据包都通过真实的网络接口传输。虚拟IP地址通常用于数据库高可用性。应用程序将其用于数据库连接,而不是普通的主机IP地址。当活动数据库失败时,VIP将转移到新升…

    2022年10月20日
    6
  • 模拟赛【20190802】phantasm

    模拟赛【20190802】phantasm然鹅没有noip这个东西了。所以名字改成了CSP模拟,手动滑稽。【问题描述】求b序列共有多少个。【解题思路】然后再用隔板法计数:转载于:https://www.cnblogs.com/ve-2021/p/11508014.html…

    2022年5月7日
    48
  • P2v, V2v 实践

    P2v, V2v 实践P2V(物理机转虚拟机)p2v,就是physicalmachinetovirtualmachine,物理机转换成虚拟机,物理机有硬件和软件资源两部分,虚拟机同样也有硬件和软件资源,只是硬件是虚拟出来的。p2v是把物理机的软件资源(操作系统,数据等)迁移到虚拟机,虚拟机的物理资源(CPU、内存、磁盘等),根据现场情况分配创建。 p2v,一般会通过转换整个物理磁盘,或者某个分区成某种格式的镜像…

    2022年7月26日
    50
  • Linux集群分发脚本xsync[通俗易懂]

    Linux集群分发脚本xsync[通俗易懂]Linux集群分发脚本xsync1.scp(securecopy)安全拷贝2.rsync远程同步工具3.xsync集群分发脚本4.免密登陆1.scp(securecopy)安全拷贝1)scp定义:scp可以实现服务器与服务器之间的数据拷贝(fromserver1toserver2)2)基本语法scp-r$pdir/$fname…

    2022年5月5日
    286
  • PyCharm激活码永久有效PyCharm2017.1.8激活码教程-持续更新,一步到位

    PyCharm激活码永久有效PyCharm2017.1.8激活码教程-持续更新,一步到位PyCharm激活码永久有效2017.1.8激活码教程-Windows版永久激活-持续更新,Idea激活码2017.1.8成功激活

    2022年6月19日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号