• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

R语言专题,如何使用party包构建决策树?

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
下面将在iris数据集上,演示如何使用party包中的函数ctree来建立一棵决策树。


iris数据集中的Sepal.Length、Sepal.Width、Petal.Length和Petal.Width,都将用来预测鸢尾花的种类。
party包中的函数ctree用来建立决策树,函数predict用来对新数据进行预测。


建模之前,将iris数据集划分为两个子集:其中70%的数据用于训练,剩下的30%做测试,为了获得可重现的结果,随机种子设定为固定值。


str(iris)
set.seed(1234) 
ind <- sample(2, nrow(iris), replace=TRUE, prob=c(0.7, 0.3))
trainData <- iris[ind==1,]
testData <- iris[ind==2,]
下面先加载party包,并建立一棵决策树,然后查看预测结果。
函数ctree用于控制决策树训练的几个参数是,minSplit、MinBusket、Maxsurrogate和MaxDepth。


决策树,使用这几个参数的默认设置来建立一棵决策树。


代码中,myFormula指定了Species为目标变量,其余的所有变量为自变量。
library(party)
myFormula <- Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
iris_ctree <- ctree(myFormula, data=trainData)
# check the prediction
table(predict(iris_ctree), trainData$Species)
再输出规则并绘制已经构建好的决策树,并查看
print(iris_ctree)
plot(iris_ctree)


决策树图


图中,每一个叶子节点的条形图,显示了一个实例被划分到某个种类的概率



简化决策树


plot(iris_ctree, type="simple")
图中表现为叶子节点中的“y”。

例如,节点2中的标记“n=40,y=(1,0,0)”,表明该节点包含40个训练实例,并且所有实例都属于“setosa”这一种类。




测试决策树


使用测试数据对构建好的决策树进行测试。
# predict on test data
testPred <- predict(iris_ctree, newdata = testData)
table(testPred, testData$Species)


决策树算法存在的问题


ctree目前版本不能很好地处理缺失值,因此含有缺失值的实例有时会被划分到左子树中,有时会被划分到右子树中,这是由替代规则决定的。
另外还存在一个问题,如果训练集中的一个变量在使用函数ctree构建决策树后被剔除,那么在对测试集进行预测时也必须包含该变量,否则调用函数predict会失败。
此外,如果测试集与训练集的分类变量水平值不同,对测试集的预测也会失败。


解决方法


解决此类问题的方法是,使用训练集构建了一棵决策树后,再利用第一棵决策树中包含的所有变量重新调用ctree建立一棵新的决策树,并根据测试集中分类变量的水平值显式地设置训练数据。

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
R语言学习路线和常用数据挖掘包发布时间:2022-07-18
下一篇:
用R语言开始量化投资发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap