文档详情

r中决策树的实现

小**
实名认证
店铺
PDF
319.50KB
约7页
文档ID:89184972
r中决策树的实现_第1页
1/7

一、R 包中决策树的函数 (1)ID3 算法 在 R 中我们使用 rpart 包中的 rpart()函数实现树回归,应该使用的是 ID3 算法吧先把该包中两个十分重要的函数介绍如下: 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 是数据,即包含前面 formula 中变量的数据框 na.action 是缺失数据的处理办法, 默认办法为删除因变量缺失的观测, 而保留自变量缺失的观测 method 根据树末端的数据类型选择相应变量分割方法,本参数有四种 取值:连续型“anova”;离散型“class”;计数型(泊松过程)“poisson”;生存分 析型“exp”程序会根据因变量的类型自动选择方法,但一般情况下最 好还是指明本参数,以便让程序清楚做哪一种树模型 parms 用来设置三个参数:先验概率、 损失矩阵、 分类纯度的度量方法。

control 控制每个节点上的最小样本量、 交叉验证的次数、 复杂性参量: 即 cp:complexitypamemeter,这个参数意味着对每一步拆分,模型的拟 合优度必须提高的程度,等等 另外一个函数是进行剪枝,即 prune,如下 prune(tree, cp, .) 主要参数说明: tree 一个回归树对象,常是 rpart()的结果对象 cp 复杂性参量,指定剪枝采用的阈值 cp 全称为 complexity parameter, 指某个点的复杂度,对每一步拆分,模型的拟合优度必须提高的程度, 用来节省剪枝浪费的不必要的时间,R内部是怎么计算的我不知道, 希望读者能够补充 另外一个包是 rpart.plot, 里面的 rpart.plot 是用来将决策树可视化的 如下 rpart.plot(reg,type=2,faclen=3) 参数解释 reg 是 rpart 产生的对象 type 是画决策树的方法,值为 2 就是一般我们所见的那种树 faclen 是表示每个因子水平名称的长度 (2)C4.5 算法 R 中的 RWeka 包中的 J48 函数可以实现 C4.5 算法的决策树构建。

如 下 J48(formula,data,subset,na.action) 具体参数含义不再解释 但是若要加载RWeka包需要java运行环境, 否则是无法加载成功的 (3)cart 算法 R 中的 tree 包中的 tree 函数提供 CART 算法的决策树构建介绍如下 tree(formula,data,subset,na.action) 关于 tree 的参数含义与 rpart 含义差不多其他参数见帮助文档 二、一个具体的例子,帮助理解如何使用 (1)ID3 算法 我们利用 lars 包中的糖尿病数据来做决策树,数据分为 x,y,x2 三个部 分,因变量为 y,数据是关于糖尿病的血液化验等指标这个数据集最 早被用在偏最小二乘回归的文章里代码如下 library(rpart.plot) library(rpart) data(diabetes,package='lars') #加载 lars 包中的数据 diabetes w reg rpart.plot(reg,type=2,faclen=3) 我们过构建的决策树有可能出现过拟合情况 (可用交叉验证法来检验, 这里从略) ,如果出现我们要对其进行剪枝。

就要选择最优的 cp 值进 行剪枝我们首先查看树里面的 cptable如下 reg$cptable 根据以上结果,我们选择合适的 cp 值为 0.025.让我们看看为什么会 选择 0.025.首先介绍结果中各个变量的含义交叉验证的估计误差为 “xerror”列, 以及标准误差为“xstd”列 在剪枝理论中, 我们保证 xerror 尽量小, 但不一定最小 而是允许它在 ‘最小误差±相应的标准差’ 因此在本例中最小为 0.6782094, 再加上相应的标准差 0.04211012 为 0.7203195 而这个值介于第 3 行和第 4 行之间 (参见他们的 xerror) . 因此我们选择的 cp 介于第 3 行和第 4 行的 cp 值之间 在这里我选择 0.025 作为剪枝的 cp 值故剪枝如下 reg2 rpart.plot(reg2) #再进行可视化 我们构建好了决策树 reg2,下面就可以用 predict 函数来对测试样本 进行分类了如下 result.reg library(tree) data(iris) ir reg plot(reg) text(reg) #下面我们生成测试集,并做预测 set.seed(124) count.test test result.reg result.reg 我们来解释下result.reg的结果。

最左边是 test取出的 ir 中的样本号, 有小数是因为我们是有重复的取右边对应每个样本可能为 setosa,versicolor,virginnica 的概率值因此我们知道第 64 个样本是 versicolor 类 补充: 可使用?predict.rpart查看rpart包中的predict函数的帮助信息 在本例中,还可以使用 result.reg-predict(reg,test,type=’class’) 一步到位得到测试集被分类的类别号 。

下载提示
相似文档
正为您匹配相似的精品文档