百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

RevoScaleR 中函数rxDTree 拟合决策树模型(R语言 MLS)

toyiye 2024-06-21 12:29 13 浏览 0 评论

RevoScaleR中的rxDTree函数使用基于二进制的递归分区算法来匹配基于树的模型。得到的模型与推荐的R包rpart生成的模型相似。就像rpart一样,rxDTree也支持分类树和回归树;差异由响应变量的性质决定:一个因子响应生成一个分类树;数值响应生成回归树。

rxDTree算法

决策树是一种广泛应用于分类和回归的有效算法。构建决策树通常需要对所有连续变量进行排序,以便决定在何处分割数据。在处理大数据时,这个排序步骤会占用大量的时间和内存。为了克服排序障碍,人们提出了各种技术,这些技术大致可分为两类:执行数据预排序使用数据的近似汇总统计。尽管预排序技术更接近于标准的决策树算法,但它们不能适应非常大的数据集。这些大数据决策树通常以各种方式并行化,以支持大规模学习:数据并行性水平或垂直地划分数据,以便不同的处理器可以看到不同的观察结果或变量,任务并行性在不同的处理器上构建不同的树节点。

rxDTree算法是一种具有水平数据并行性的近似决策树算法,特别适用于处理非常大的数据集。它使用直方图作为数据的近似紧凑表示,并以宽度优先的方式构建决策树。该算法可以在并行设置中执行,如多核机器或具有主从架构的分布式环境。每个worker只获得数据观察值的子集,但是可以看到到目前为止构建的完整树。它根据所看到的数据构建一个直方图,该直方图基本上将数据压缩到固定的内存中。然后,这个数据的近似描述被发送到一个主节点,通信复杂度不变,与数据集的大小无关。主节点集成从每个工作人员接收到的信息,并决定拆分哪个终端树节点以及如何拆分。由于直方图是并行构建的,因此即使对于非常大的数据集,也可以快速构建直方图。

使用rxDTree,您可以通过指定直方图的最大箱数来控制时间复杂度和预测精度之间的平衡。该算法构建的直方图在每个bin中观察到的数量大致相等,并将箱的边界作为候选分割为终端树节点。由于只检查了有限数量的分割位置,因此可能选择了一个次最优的分割点,从而导致整个树与用标准算法构造的树不同。然而,分析表明,即使两棵树不完全相同,并行树的错误率也接近串行树的错误率。您可以在直方图中设置箱的数量,以控制准确性和速度之间的权衡:大量的箱可以更准确地描述数据,从而获得更准确的结果,而少量的箱可以降低时间复杂度和内存使用量。

当箱数等于或超过观察数的整数预测器时,rxDTree算法产生与标准排序算法相同的结果。


一个简单的分类树

数据

kyphosis 数据集是从儿童接受外科脊柱矫正手术中来的,数据集有4列、81行(81个病例)。

kyphosis 数据集的各列含义

  • Kyphosis:采取手术后依然出现脊柱后凸(驼背)的因子
  • Age:单位是“月”
  • Number:代表进行手术的脊柱椎骨的数目
  • Start:在脊柱上从上往下数、参与手术的第一节椎骨所在的序号

# fit decision tree
kyphTree <- rxDTree(Kyphosis ~ Age + Start + Number, data = kyphosis, 
	cp=0.01)

# fitted decision tree model object
kyphTree

# plot the tree
library(RevoTreeView)
plot(createTreeView(kyphTree))

根据我们对kyphosis 数据的了解,更多的椎体参与到手术中,术后并发症后凸的可能性似乎更大。同样,术后并发症后凸的可能性对年龄的依赖似乎是非线性的:它首先随年龄增长而增加,峰值在5-9岁之间,然后再次下降。

rxDTree模型似乎证实了Start < 8.5的早期结论,19个观察对象中有11个出现后凸,而29个Start >= 14.5的受试者中没有一个出现后凸。在剩下的33名受试者中,年龄是主要的分裂因素,正如我们之前所观察到的,5至9岁是发生后凸的最高概率。

返回的对象kyphTree是类rxDTree的一个对象。rxDTree类是在rpart类的基础上建模的,因此rxDTree类的对象具有rpart对象的最基本组件:frame、cptable、split等。然而,在默认情况下,rxDTree对象不会从类rpart继承。但是,您可以使用rxAddInheritance函数将rpart继承添加到rxDTree对象。

一个简单的回归树

数据

mtcars数据来源于1974年美国《汽车趋势》杂志,包括32辆汽车(1973-74型)的油耗和10个方面的汽车设计和性能。

一个包含11个变量的32个观察值的数据框架。

  • 英里/加仑
  • 圆筒数
  • 位移(cuin .)
  • 总马力
  • 后桥比
  • 重量(1000磅)
  • 1/4英里的时间
  • V/S
  • 传输(0 =自动,1 =手动)
  • 前向齿轮齿数
  • 化油器的碳水化合物数

作为回归树的一个简单例子,考虑mtcars数据集,让我们使用排量(disp)作为预测因子来拟合油耗(mpg):

mtcarTree <- rxDTree(mpg ~ disp, data=mtcars)
mtcarTree
plot(createTreeView(mtcarTree))

大型汽车(发动机排量大于163.5立方英寸的汽车)和小型汽车之间存在明显的差异。

大数据树模型

数据

作为大型数据分类树的一个例子,考虑以下使用7%的完整航空公司数据子样本的简单模型(使用变量ArrDel15表示延迟15分钟或更长时间的航班)在这里下载数据:https://packages.revolutionanalytics.com/datasets/
# Large Data Tree Models
 
bigDataDir <- "C:/Data"
sampleAirData <- file.path(bigDataDir, "AirOnTime7Pct.xdf")	
airlineTree <- rxDTree(ArrDel15 ~ CRSDepTime + DayOfWeek, data = sampleAirData,
 blocksPerRead = 30, maxDepth = 5, cp = 1e-5)

默认的cp等于0会产生大量的分割;指定cp = 1e-5会在这个模型中产生一组更易于管理的分割。

plot(createTreeView(airlineTree))

plot(airlineTree$cptable[,'nsplit'], airlineTree$cptable[,"xerror"],
 type='b',
 xlab="nsplit",
 ylab="xerror")

随着分割次数的增加,我们看到交叉验证错误(xerror)稳步下降,但请注意,在nsplit=11左右,更改的速度显著放缓。最优模型很可能就在这里。

# prune model
airlineTreePruned <- prune.rxDTree(airlineTree, cp=2.097651e-04)

plot(createTreeView(airlineTreePruned))

相关推荐

如何用 coco 数据集训练 Detectron2 模型?

随着最新的Pythorc1.3版本的发布,下一代完全重写了它以前的目标检测框架,新的目标检测框架被称为Detectron2。本教程将通过使用自定义coco数据集训练实例分割模型,帮助你开始使...

CICD联动阿里云容器服务Kubernetes实践之Bamboo篇

本文档以构建一个Java软件项目并部署到阿里云容器服务的Kubernetes集群为例说明如何使用Bamboo在阿里云Kubernetes服务上运行RemoteAgents并在agents上...

Open3D-ML点云语义分割实验【RandLA-Net】

作为点云Open3D-ML实验的一部分,我撰写了文章解释如何使用Tensorflow和PyTorch支持安装此库。为了测试安装,我解释了如何运行一个简单的Python脚本来可视化名为...

清理系统不用第三方工具(系统自带清理软件效果好不?)

清理优化系统一定要借助于优化工具吗?其实,手动优化系统也没有那么神秘,掌握了方法和技巧,系统清理也是一件简单和随心的事。一方面要为每一个可能产生累赘的文件找到清理的方法,另一方面要寻找能够提高工作效率...

【信创】联想开先终端开机不显示grub界面的修改方法

原文链接:【信创】联想开先终端开机不显示grub界面的修改方法...

如意玲珑成熟度再提升,三大发行版支持教程来啦!

前期,我们已分别发布如意玲珑在deepinV23与UOSV20、openEuler24.03发行版的操作指南,本文,我们将为大家详细介绍Ubuntu24.04、Debian12、op...

118种常见的多媒体文件格式(英文简写)

MP4[?mpi?f??]-MPEG-4Part14(MPEG-4第14部分)AVI[e?vi??a?]-AudioVideoInterleave(音视频交错)MOV[m...

密码丢了急上火?码住7种console密码紧急恢复方式!

身为攻城狮的你,...

CSGO丨CS2的cfg指令代码分享(csgo自己的cfg在哪里?config文件位置在哪?)

?...

使用open SSL生成局域网IP地址证书

某些特殊情况下,用户内网访问多可文档管理系统时需要启用SSL传输加密功能,但只有IP,没有域名和证书。这种情况下多可提供了一种免费可行的方式,通过openSSL生成免费证书。此方法生成证书浏览器会提示...

Python中加载配置文件(python怎么加载程序包)

我们在做开发的时候经常要使用配置文件,那么配置文件的加载就需要我们提前考虑,再不使用任何框架的情况下,我们通常会有两种解决办法:完整加载将所有配置信息一次性写入单一配置文件.部分加载将常用配置信息写...

python开发项目,不得不了解的.cfg配置文件

安装软件时,经常会见到后缀为.cfg、.ini的文件,一般我们不用管,只要不删就行。因为这些是程序安装、运行时需要用到的配置文件。但对开发者来说,这种文件是怎么回事就必须搞清了。本文从.cfg文件的创...

瑞芯微RK3568鸿蒙开发板OpenHarmony系统修改cfg文件权限方法

本文适用OpenHarmony开源鸿蒙系统,本次使用的是开源鸿蒙主板,搭载瑞芯微RK3568芯片。深圳触觉智能专注研发生产OpenHarmony开源鸿蒙硬件,包括核心板、开发板、嵌入式主板,工控整机等...

Python9:图像风格迁移-使用阿里的接口

先不多说,直接上结果图。#!/usr/bin/envpython#coding=utf-8importosfromaliyunsdkcore.clientimportAcsClient...

Python带你打造个性化的图片文字识别

我们的目标:从CSV文件读取用户的文件信息,并将文件名称修改为姓名格式的中文名称,进行规范资料整理,从而实现快速对多个文件进行重命名。最终效果:将原来无规律的文件名重命名为以姓名为名称的文件。技术点:...

取消回复欢迎 发表评论:

请填写验证码