R语言专题,如何使用party包构建决策树?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言专题,如何使用party包构建决策树?相关的知识,希望对你有一定的参考价值。
下面将在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建立一棵新的决策树,并根据测试集中分类变量的水平值显式地设置训练数据。
本文出自 “中科院计算所培训” 博客,谢绝转载!
以上是关于R语言专题,如何使用party包构建决策树?的主要内容,如果未能解决你的问题,请参考以下文章
R语言图形用户界面数据挖掘包Rattle:加载UCI糖尿病数据集并启动Rattle图形用户界面调用party包中的ctree函数构建条件推理树模型并使用rattle可视化条件推理决策树
R语言图形用户界面数据挖掘包Rattle:加载UCI糖尿病数据集并启动Rattle图形用户界面调用party包中的ctree函数构建条件推理树模型并使用rattle可视化条件推理决策树
R语言使用party包中的ctree函数构建条件推理决策树(Conditional inference trees)使用plot函数可视化训练好的条件推理决策树条件推理决策树的叶子节点的阴影区域表
R语言使用party包中的ctree函数构建条件推理决策树的流程和步骤条件推理决策树是传统决策树的一个重要变体条件推理树的分裂是基于显著性测试而不是熵/纯度/同质性度量来选择分裂
R语言使用party包中的cforest函数基于条件推理决策树(Conditional inference trees)构建随机森林使用varimp函数查看特征重要度使用table函数计算混淆矩阵