在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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建立一棵新的决策树,并根据测试集中分类变量的水平值显式地设置训练数据。 |
请发表评论