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()                       #列出已载入的包中的数据集

head(kyphosis)         # 前6行
head(kyphosis,n=5)  # 前5行
kyphosis[1:3,]            # 前3行
tail(kyphosis)             # 后6行

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:#查看模型的详细过程,只显示部分

图2:列出对应规则

图3:作出决策树图

图4:更美观的决策树图

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

图6:交叉验证结果图

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

决策树模型(R语言)相关推荐

  1. r语言adf检验结果怎么看_从AR模型到VAR模型——R语言实现

    一.自回归模型(AR模型) 1.1 概念 自回归模型(英语:Autoregressive model,简称AR模型),是统计上一种处理时间序列的方法,用同一变量例如的之前各期,亦即至来预测本期的表现, ...

  2. Multinomial Logit Model (MNL) 模型R语言nnet包multinom函数实现实例

    最近做项目涉及到要使用multinomial logit model (MNL) 模型.看了一堆文献讲mnl, 但是没有给什么具体能上手的实例,就算有也是一笔带过,打算找一些使用R 语言来实现mnl模 ...

  3. 决策树与R语言(RPART)

    关于决策树理论方面的介绍,李航的<统计机器学习>第五章有很好的讲解. 传统的ID3和C4.5一般用于分类问题,其中ID3使用信息增益进行特征选择,即递归的选择分类能力最强的特征对数据进行分 ...

  4. 时间序列模型R语言实现-批量建模,预测(ARIMA, 随机森林)

    时间序列预测首先要确定预测的内容. 本文预测共享单车的日租借量 使用的是每日数据 预测的时间范围是需要提前一个月.半年还是一年?根据预测范围,会使用到不同的模型. 首先安装加载本文所需要的包 inst ...

  5. 应用时间序列分析--有季节效应的非平稳序列分析-ARIMA乘法模型-R语言

    在上一篇文章(http://t.csdn.cn/Lp2Nj)中,我们用到的数据是一个既含有季节效应又含有长期趋势效应的简单序列,为什么说它简单呢,是因为这种序列的季节效应.趋势效应和随机波动彼此之间很 ...

  6. R语言︱决策树族——随机森林算法

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:有一篇<有监督学习选择深度学习 ...

  7. R语言VaR市场风险计算方法与回测、用LOGIT逻辑回归、PROBIT模型信用风险与分类模型...

    全文链接:http://tecdat.cn/?p=27530  市场风险指的是由金融市场中资产的价格下跌或价格波动增加所导致的可能损失. 相关视频 市场风险包含两种类型:相对风险和绝对风险.绝对风险关 ...

  8. R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型

    全文下载链接:http://tecdat.cn/?p=11974 R2WinBUGS软件包提供了从R调用WinBUGS的便捷功能.它自动以WinBUGS可读的格式写入数据和脚本,以进行批处理(自1.4 ...

  9. R语言CART决策树、随机森林、chaid树预测母婴电商平台用户寿命、流失可视化

    全文链接:http://tecdat.cn/?p=31644 借着二胎政策的开放与家庭消费升级的东风,母婴市场迎来了生机盎然的春天,尤其是母婴电商行业,近年来发展迅猛(点击文末"阅读原文&q ...

  10. R语言用逻辑回归建立用户付费模型

    原文链接:http://tecdat.cn/?p=967 对于某企业新用户,会利用大数据来分析该用户的信息来确定是否为付费用户,弄清楚用户属性,从而针对性的进行营销,提高运营人员的办事效率(点击文末& ...

最新文章

  1. “N+虚拟现实行业高峰论坛”成功举办,共创VR美好未来
  2. 张锋在美赢得“基因剪刀”专利判决!此前与诺奖得主纠纷多年
  3. matlab改变图形窗口命名
  4. 初级ABAPer考题
  5. DCMTK:测试DcmSCP和DcmSCU类
  6. 对于javaScript闭包,立即执行函数的用法的一些理解
  7. curl查看swift状态命令_前端应该会的23个linux常用命令
  8. MySQL百万级/千万级数据存储解决方案
  9. 【转载】IDEA中Git的更新/提交/还原方法
  10. matlab的pulse使用想法
  11. LMS Virtual Lab 流固模态分析
  12. [转]本地图片预览二三事
  13. 树莓派RaspberryPi的RPi.GPIO使用指南
  14. php : 收集整理的非常有用的函数
  15. 多校3 1008 Solve this interesting problem
  16. 计算机一级选择题电子档,计算机一级考试选择题
  17. 2019最新某私塾在线高级java软件架构师实战培训教程
  18. C语言程序的语法规范,C语言程序结构和语法规则
  19. 城市三字码,机场三字码(CITY / AIRPORT 3 LETTERS CODE)
  20. 三菱je -c中映射表的作用_如何将三菱PLC程序转换成欧姆龙PLC程序?

热门文章

  1. 如何存放青龙脚本文件(不用复制)
  2. 微波遥感——微波与大气
  3. excel表格换行快捷键_excel常用快捷键分享
  4. 如何用计算机管理员权限,如何以管理员身份运行电脑?急
  5. 于NXP芯片第一次无法进入CAN中断的问题
  6. 在开放环境的步态识别:一个基准(三)
  7. uboot_v2016 版本中fw_printenv的编译问题
  8. 电脑莹石云显示认证失败_添加萤石云方法与常见问题解答
  9. python机械臂机器人_SCARA机器人 机械手臂 写字机 DIY、教学、视觉识别、遥控机器人...
  10. java libtorrent_[转载]libtorrent安装windows版