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

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

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

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 遗传算法经典实例matlab代码_退火算法与遗传算法

    遗传算法经典实例matlab代码_退火算法与遗传算法经典遗传算法及简单实例(MATLAB)1.遗传算法简单介绍1.1理论基础1.2算法要点1.1编码1.2适应度函数1.3基本流程2.雪兔实例1.遗传算法简单介绍1.1理论基础整个算法的基础就是达尔文的生物进化论,“物竞天择,适者生存”这句话已经是常识了。雪兔的故事:东北那旮瘩,有群原始雪兔,刚从未知物种进化而来,五颜六色(表现型)漂亮极了,称之为I(0)。(注意:种群初始化)入夏了,雪兔们出来觅食,浅色兔在草地中无所遁形,被雪狐收割了一波(大批浅色+小批深色)。入冬了,雪

  • 图论——握手定理_离散数学 树 握手定理

    图论——握手定理_离散数学 树 握手定理这是一个非常重要的图论定理在多出用到:握手定理:在任何有向图图中,所有顶点的度数之和等于边数的2倍,所有顶点的入度之和等于所有顶点出度之和,等于边数无向简单图,同样所有顶点的度数之和等于边数的2

  • python手机端秒杀_python实现淘宝秒杀脚本

    python手机端秒杀_python实现淘宝秒杀脚本本文实例为大家分享了python实现淘宝秒杀脚本的具体代码,供大家参考,具体内容如下1.安装pycharm。网上教程很多。2.安装Selenium库。Selenium支持很多浏览器,我选择的是Firefox浏览器。因为我这里是Python3环境,自带的又pip,所以安装selenium直接使用pip安装安装方法:–打开cmd;–输入命令进入Python36/Scripts(找到下图的目录)…

  • tomcat 设置允许跨域访问「建议收藏」

    tomcat 设置允许跨域访问「建议收藏」既然想到使用tomcat进行跨域的设置,而不使用在项目中设置header来解决,说明你也是tomcat下的资源需要做跨域处理吧?这也是一个统一的允许跨域设置,tomcat下的所有请求都将放开,请注意。具体步骤:1.首先找到你的tomcat所在路径,并在conf文件夹下找到web.xml2.打开该文件,在以下位置加上这段:<filter><…

  • Web安全之业务逻辑漏洞

    Web安全之业务逻辑漏洞业务逻辑不同的项目有不同的功能,不同的功能需要不同的代码实现,实现这些核心功能的代码就叫业务逻辑。业务逻辑漏洞业务逻辑漏洞是指由于程序逻辑不严谨或逻辑太复杂,导致一些逻辑分支不能正常处理或处理错误。常见的业务逻辑漏洞业务逻辑漏洞挖掘过程确定业务流程—>寻找流程中可以被操控的环节—>分析可被操控环节中可能产生的逻辑问题—>尝试修改参数触发逻辑问题业务逻辑漏洞1.URL跳转漏洞1.1.URL跳转概述1.2.触发方式及绕或技巧1.3.修复方法2.短信邮箱轰炸漏洞2.1.短信邮.

  • IDE工具(14) idea创建JavaWeb项目(小白教程)[通俗易懂]

    IDE工具(14) idea创建JavaWeb项目(小白教程)[通俗易懂]创建项目第一步:finish之后,项目结构如下图所示第二步:在WEB-INF下新建classes和lib2个文件夹(Directory)配置项目第三步:配置javaclass字节码编译路径,点击第四步:配置jar包存放路径lib文件夹然后ok就好了classes和lib配置好之后发现颜色会出现变化第五步:配置Tom…

发表回复

您的电子邮箱地址不会被公开。

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