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

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

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


相关推荐

  • mysql联合索引失效

    mysql联合索引失效联合索引,能够缩小查询范围的字段放在第一个,比如表sensor_coc_repay_feature存近一个月数据两千多万条,建立联合索引(time,distinct_id),按照查询select*fromsensor_coc_repay_featurewheredistinct_id=%sandtime>‘2022-02-20’,此时然后按照联合索引最左匹配有使用到了time,distinct_id,但是经过time查询后的数据还会是全表,mysql会认为该查询还不如走全表查询

    2022年9月4日
    7
  • ajax跨域问题以及解决方案_js跨域请求的三种方法

    ajax跨域问题以及解决方案_js跨域请求的三种方法出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)AJAX跨域请求下面简单模拟一个场景—–>>前端有.

    2022年8月24日
    5
  • 一句jQuery代码返回顶部

    一句jQuery代码返回顶部效果体验:http://hovertree.com/texiao/yestop/使用方法:只需引用jQuery库和YesTop插件,然后一句代码就可以实现返回顶部:引用代码

    2021年12月21日
    39
  • Vim简明教程【CoolShell】

    Vim简明教程【CoolShell】

    2021年12月17日
    157
  • centOS7 安装nginx并启动

    centOS7 安装nginx并启动 一、下载安装包  cd/usr/local/software (software可能没有,用mkdir创建或者只到local目录下也行)  wgethttp://nginx.org/download/nginx-1.6.2.tar.gz  (选择一个比较稳定的版本下载即可,或者手动下载后,用xshell传到该目录下也行) 二、解压安装  tar-zx…

    2022年5月7日
    163
  • spring3.2 定时器 SchedulerFactoryBean 注入错误[通俗易懂]

    spring3.2 定时器 SchedulerFactoryBean 注入错误[通俗易懂]异常信息[org.springframework.scheduling.quartz.SchedulerFactoryBean]forproperty’scheduler’;nestedexceptionisjava.lang.IllegalArgumentException:Cannotconvertvalueoftype[org.quartz.impl.Std

    2022年5月10日
    29

发表回复

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

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