初始决策树与随机森林

Posted jvfjvf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初始决策树与随机森林相关的知识,希望对你有一定的参考价值。

本文将介绍如何使用party包,rpart包及randomForest包来建立预测模型。

首先,我们将使用party包来建立决策树,并用决策树用于分类。其次,利用randomForest包来训练随机森林模型

最后学习使用rpart包来建立决策树。

所使用的数据集为R中自带的iris数据集

 

使用party包来建立决策树 

  • 首先查看数据集结构

  •  划分训练集和测试集
1 #划分训练集和测试集
2 set.seed(1234)
3 nrow(iris) #共150行
4 ind <- sample(x = 1:2,size = nrow(iris),replace = T,prob = c(0.7,0.3)) #设随机数1或者2
5 train_data <- iris[ind==1,]
6 test_data <- iris[ind==2,]
  • 建立决策树

1 #建立决策树 2 library(party) #加载library包 3 iris_ctree <- ctree(formula = Species~.,data = train_data) #建立决策树,Species(种类为目标变量),其他为输入变量 4 5 table(predict(iris_ctree),train_data$Species) #建立频数表检查预测结果

可以看到,预测结果中,versicolor有一个预测错误,virginica有三个预测错误,预测结果可以接受。

  • 输出规则和绘制图表
    print(iris_ctree)
    plot(iris_ctree)  #绘制决策树
    plot(iris_ctree,type=\'simple\') #简化形式

     

 

 

  •  使用测试集对用训练集构建的决策树进行测试
iris_test <- predict(iris_ctree,newdata=test_data) #以iris_ctree为模型,代入需要预测的数据test_data,即学习集,进行预测
table(iris_test,test_data$Species)                 #输出列联表查看预测结果

  

仅有virginica中有两个错误归类为versicolor,预测模型准确率达到94.7%。

  • 使用randomForest包训练随机森林 

1 #使用randomForest包训练随机森林
2 library(randomForest)
3 rf <- randomForest(Species~. ,data = train_data,ntree=10,proximity=T)#产生随机森林,ntree:决策树数量
4 table(predict(rf),train_data$Species) #查看频数表

 print(rf) #查看规则 

 plot(rf)#根据随机森林生成的不同的树绘制误差率 

 importance(rf) #查看每个变量的重要性 

 varImpPlot(rf) #通过图形查看每个变量的重要性 

  • 使用测试集测试模型

#使用测试集测试训练模型
iris_ran_PRED <-predict(object = rf,newdata = test_data)
table(iris_ran_PRED,test_data$Species)

 

  • 使用rpart包构建数据集

  • 载入数据集

  调用TH.data包中的Bodyfat数据集

  • 划分数据集

1 #划分数据集
2 set.seed(1234)
3 ind <- sample(x = 1:2,size=nrow(bodyfat),replace = T,prob = c(0.7,0.3))
4 train_data <- bodyfat[ind==1,]
5 test_data <- bodyfat[ind==2,]
  • 构建决策树

 

1 #构建决策树
2 library(rpart)   #加载包使用rpart,prune等函数
3 #查看体脂和年龄、腰围、臀围、肘宽、膝宽的关系
4 bodyfat_rpart  <- rpart(formula = DEXfat~age+waistcirc+hipcirc+elbowbreadth+kneebreadth,
5                         data = train_data,
6                         control=rpart.control(minsplit = 10))
7 print(bodyfat_rpart) #输出规则
8 plot(bodyfat_rpart) #绘制决策树
9 text(bodyfat_rpart,use.n = T) #添加标签

 

  •  修剪决策树

 1 #修剪决策树
 2 opt <- which.min(bodyfat_rpart$cptable[,\'xerror\']) #选择具有最小误差的决策树,第七行的xerror为最小
 3 cp <- bodyfat_rpart$cptablep[opt,\'CP\'] #选择第七行的\'CP\'值
 4 bodyfat_prune <- prune(bodyfat_rpart,cp=cp) #修剪树
 5 print(bodyfat_prune)
 6 plot(bodyfat_prune)   #绘制修剪后的决策树
 7 text(bodyfat_prune,use.n = T)  #添加标签
 8 DEXfat_pred <- predict(bodyfat_prune,newdata = test_data)  #预测
 9 xlim <- range(bodyfat$DEXfat)  #X坐标的区间为体脂的区间
10 plot(DEXfat_pred~DEXfat,data=test_data,xlab=\'Observed\',ylab=\'Predicted\',ylim=xlim,xlim=xlim) #绘制图形查看观测值和预测值的差异
11 abline(a=0,b=1)  #加入对角线进行对比,y=a+bx

上图具有最小预测误差的决策树。

 

可观察到测试集中,观测值和预测值的差异,从而判断是否为一个好的预测模型。可看到大部分点都在对角线上或附近,

约5个点差异较大,该决策树模型的准确率约为1-(5/15)=66.7%

: 通过这个接口,可以在R中使用Weka的所有算法

以上是关于初始决策树与随机森林的主要内容,如果未能解决你的问题,请参考以下文章

决策树与随机森林

决策树与随机森林实例

决策树、随机森林

决策树与随机森林

08 决策树与随机森林

决策树与随机森林