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

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • eclipse import导入报错_project2016安装出错

    eclipse import导入报错_project2016安装出错【转载请注明出处:http://blog.csdn.net/zjbpku/article/details/7370347】本文只介绍方法不解释原因:0,如果R.layout.main有误,将importandroid.R删除一,删除gen文件,会自动生成一个新的gen(Project下的BuildAutomatically要选上)二、右键点击有误文件,选择BuildP

    2022年9月1日
    4
  • java之葵花宝典

    java之葵花宝典importjava util Arrays importjava util Scanner author 男神许老师 2020 年 1 月 1 日 classStudent publicintage publicString publicStuden System ou

    2025年9月18日
    3
  • 接口测试框架之Karate

    接口测试框架之Karate之前在一些博客中零零散散看到过对Karate介绍,基本都和Graphql接口测试绑定在一起,似乎测试GraphqlAPI首选的工具之一就是Karate。后来一位开发大牛也推荐我使用Karate,他提到自己之前的项目中就用框架测试Graphql接口,且强调该框架在ThoughtWorks的技术雷达中。想着Graphql使用越来越广泛,且技术雷达中介绍过的框架一般都有其独特优势,带着这些好奇心我花了…

    2025年8月14日
    3
  • 美股实时行情api接口(美股开户)

    所有美股历史交易行情数据,完整历史交易/任意时间段查询。1.产品功能支持所有历史美股交易查询;支持指定任意时间段查询;超高的查询效率,秒级返回;所有的交易数据为未复权的数据;全接口支持HTTPS(TLSv1.0/v1.1/v1.2/v1.3);全面兼容AppleATS;全国多节点CDN部署;接口极速响应,多台服务器构建API接口负载均衡。2.API文档接口地址:https://api.gugudata.com/stock/us返回格式:

    2022年4月11日
    136
  • linux系统刷站群IP脚本

    linux系统刷站群IP脚本

    2022年2月21日
    78
  • hbase解决海量图片存储

    hbase解决海量图片存储随着互联网、云计算及大数据等信息技术的发展,越来越多的应用依赖于对海量数据的存储和处理,如智能监控、电子商务、地理信息等,这些应用都需要对海量图片的存储和检索。由于图片大多是小文件(80%大小在数MB以内),以GFS、HDFS为代表的适用于流式访问大文件的分布式存储系统,若直接用来存储图片,由于元数据膨胀,在扩展性和性能方面均存在严重问题。   为了解决HDFS在小文件存储方面的问题,通

    2022年7月12日
    22

发表回复

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

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