决策树模型(R语言)

决策树模型(R语言)R 语言中最常用于实现决策树的有两个包 分别是 rpart 包和 party 包 其区别如下 rpart 包的处理方式 首先对所有自变量和所有分割点进行评估 最佳的选择是使分割后组内的数据更为 一致 pure 这里的 一致 是指组内数据的因变量取值变异较小 rpart 包对这种 一致 性的默认度量是 Gini 值 确定停止划分的参数有很多 参见 rpart control 确定这些参数是非常重要而微妙的 因

R语言中最常用于实现决策树的有两个包,分别是rpart包和party包,其区别如下:

rpart包的处理方式:首先对所有自变量和所有分割点进行评估,最佳的选择是使分割后组内的数据更为“一致”(pure)。这里的“一致”是指组内数据的因变量取值变异较小。rpart包对这种“一致”性的默认度量是Gini值。确定停止划分的参数有很多(参见rpart.control),确定这些参数是非常重要而微妙的,因为划分越细,模型越复杂,越容易出现过度拟合的情况,而划分过粗,又会出现拟合不足。处理这个问题通常是使用“剪枝”(prune)方法。即先建立一个划分较细较为复杂的树模型,再根据交叉检验(Cross-Validation)的方法来估计不同“剪枝”条件下,各模型的误差,选择误差最小的树模型。

party包的处理方式:它的背景理论是“条件推断决策树”(conditional inference trees):它根据统计检验来确定自变量和分割点的选择。即先假设所有自变量与因变量均独立。再对它们进行卡方独立检验,检验P值小于阀值的自变量加入模型,相关性最强的自变量作为第一次分割的自变量。自变量选择好后,用置换检验来选择分割点。用party包建立的决策树不需要剪枝,因为阀值就决定了模型的复杂程度。所以如何决定阀值参数是非常重要的(参见ctree_control)。较为流行的做法是取不同的参数值进行交叉检验,选择误差最小的模型参数。

R语言中有许多包都要自己安装:

install.packages(”包名”)

library(包名) #可以检测是否安装成功并且调用

下面以数据集kyphosis为例进行决策树建模,kyphosis数据集是rpart自带的数据集,kyphosis是描述儿童纠正脊柱手术数据集,一共有4个变量。根据变量的英文名称,可以了解到这是以驼背、年龄、编号、开始时间为变量的数据集,一共有81行数据。

先来了解rpart包中的函数rpart:

rpart(formula, data, weights, subset, na.action = na.rpart, method, model = FALSE, x = FALSE, y = TRUE, parms, control, cost, …)

formula 模型公式,类似回归中y~x1+x2+x3
data 数据框形式的数据集
weights, 选择权重
subset 选择数据集中的指定行
na.action 缺失值处理方式,默认删除y丢失的所有观察值,而那些缺少一个或多个自变量的观测值则保留
method 默认自动选择最佳的方法。主要方法有: 连续性”anova”, 泊松型”poisson”, 类别”class”和 指数型”exp”,程序会根据因变量的类型自动选择方法,但一般情况下最好还是指明本参数
model 是否在结果中保留模型数据框
x 结果中是否显示自变量
y 结果中是否显示因变量
parms 用来设置三个参数:先验概率 (component prior),损失矩阵 (component loss) 和分裂指数 (component split)
control

对树进行设置的一些参数,包括

最小分支节点数(minsplit);叶节点的最少观测数(minbucket);树的深度(maxdepth);交叉验证的次数(xval);

复杂度参数(cp),用来修剪树的,当复杂度超过一定程度后,随着复杂度的提高,测试集的分类精度会降低,因此建立的决策树不宜太复杂,需进行剪枝。该剪枝算法依赖于cp,cp随树复杂度的增加而减小,当增加一个节点引起的分类精确度变化量小于树复杂度变化的cp倍时,则需剪去该节点

cost 成本矩阵

查看数据集某些行:

data()                       #列出已载入的包中的数据集

library(rpart) library(rpart.plot) library(rattle) #数据 data(kyphosis) head(kyphosis) #参数 control <- rpart.control(minsplit=10,minbucket=5,xval=10,cp=0.1) #最小分支数,叶节点最小观测数,交叉验证数,复杂度参数(complexity parameter) #决策树模型 model<- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, method="class",control=control, parms = list(prior = c(0.6,0.4), split = "information")) #查看模型结果 summary(model) #查看模型的详细过程,见图1 asRules(model) #asRules(model, compact=FALSE, ... ) 列出对应规则,是否紧凑型输出,见图2 #给出2种绘制决策树图,可以从图中看到每一类的观测数及占总数的比例 rpartplot(model) #见图3 fancyRpartPlot(model) #见图4,更美观 model$cptable #查看交叉验证结果,见图5 plotcp(model) #查看交叉验证结果图,见图6 grid() #加网格线,在这里不执行 #根据交叉验证结果,找出估计误差最小时的cp值,并重新建立模型。 xerr <-model$cptable[,"xerror"] minxerr <- which.min(xerr) mincp <-model$cptable[minxerr, "CP"] #选择交叉验证的估计误差最小时对应的cp #新模型 model.prune <- prune(model,cp=mincp) fancyRpartPlot(model.prune) #见图7

图1:#查看模型的详细过程,只显示部分

决策树模型(R语言)

图2:列出对应规则

决策树模型(R语言)

图3:作出决策树图

决策树模型(R语言)

图4:更美观的决策树图

决策树模型(R语言)

图5:交叉验证结果,可看到 交叉验证的估计误差(“xerror”),以及标准误差(“xstd”),平均相对误差=xerror±xstd 

决策树模型(R语言)

图6:交叉验证结果图

决策树模型(R语言)

图7:剪枝后的新模型(没有变化啊??)

决策树模型(R语言)

决策树模型(R语言)

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

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

(0)
上一篇 2026年3月26日 下午10:27
下一篇 2026年3月26日 下午10:27


相关推荐

  • PHP header() 函数

    PHP header() 函数

    2021年8月25日
    71
  • Java的System.getProperty详解

    Java的System.getProperty详解packagejavax org lang Date 2013 6 18 Author jilongliang Description System getProperty 详解 SuppressWarn all publicclassS publicstatic

    2026年3月17日
    1
  • Spring Boot整合RabbitMQ详细教程

    Spring Boot整合RabbitMQ详细教程1.首先我们简单了解一下消息中间件的应用场景异步处理场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行的方式;2.并行的方式(1)串行方式:将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才返回给客户端。这有一个问题是,邮件,短信并不是必须的,它只是一个通知,而这种做法让客户端等待没有必要等待的东西.(2)并行方式:将注册信…

    2022年5月14日
    41
  • C++创建临时文件

    C++创建临时文件命令 std stringorigin backup file std tmpnam nullptr

    2026年3月18日
    2
  • 金士顿DT 101 G2 U盘群联主控2251 MPALL v3.16.00量产教程[zz]「建议收藏」

    金士顿DT 101 G2 U盘群联主控2251 MPALL v3.16.00量产教程[zz]「建议收藏」最近新买的金士顿DT101G2U盘用老版本的群联检测工具GETinfo如GETinfov3.2.9.2会不认识MP的版本,一般会显示为MPv48.30.30,而使用新版本的如GETinfov3.5.7.2会显示MPALLv3.13.0B或MPALLv3.12.0A等。而这些版本网上都无释出版本的量产工具,怎么办呢,很多人都不知道该怎么选择量产工具的版本了。这里根据我成功…

    2025年6月5日
    5
  • 使用Pycharm安装Python第三方库

    使用Pycharm安装Python第三方库除了使用 easy insatll 和 pip 工具安装 Python 第三方库外还可以使用 pycharm 安装 Python 第三方库 步骤如下 1 打开 pycharm 点击 File 再点击 settings2 点击 settings 之后再点击 project 下面的 projectInter 将会出现如下界面 3 接下来点击上面界面右上角的 将会出现如下界面 然后在搜索框中搜索

    2026年3月27日
    3

发表回复

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

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