R语言书籍学习02 《R语言数据分析、挖掘建模与可视化》-第十章 决策树与随机森林的应用
借一下周老师的图。决策树可以用于数值型因变量的预测和离散型因变量的分类。其中第一个难点就是节点字段的选择,究竟该以数据的哪个类型作为节点呢?节点字段的选择这里首先引入一个信息增益的概念,也就是信息熵。延伸的感念有信息熵、基尼指数,核心思想都是将数据中的根节点挑选出来。信息增益的缺点是会偏向于取值较多的字段,信息增益率就是在信息增益的基础上增加了惩罚函数。而基尼指数就是适用于预测连续性因变量。决策树
借一下周老师的图。
决策树可以用于数值型因变量的预测和离散型因变量的分类。
其中第一个难点就是节点字段的选择,究竟该以数据的哪个类型作为节点呢?
节点字段的选择
这里首先引入一个信息增益的概念,也就是信息熵。
延伸的感念有信息熵、基尼指数,核心思想都是将数据中的根节点挑选出来。
信息增益的缺点是会偏向于取值较多的字段,信息增益率就是在信息增益的基础上增加了惩罚函数。
而基尼指数就是适用于预测连续性因变量。
决策树的减枝
决策树的减枝方法有预减枝和后减枝,后减枝有误差降低减枝、悲观减枝和代价复杂度减枝法等方法。最终目的都是减少不必要的节点。
CART决策树
在R语言里可以借助repart包完成CART决策树的构造。
rpart(formula, data, weights, subset, na.action = na.rpart, method,
model = FALSE, x = FALSE, y = TRUE, parms, control, cost, ...)
# method y为连续数值型变量-anova; 离散型的类别变量-class; 计数型的变量-poisson; 生存型的变量-exp
#control 设定决策树的预减枝和后减枝计数,具体可以看rpart.control函数
rpart.control(minsplit = 20, minbucket = round(minsplit/3), cp = 0.01,
maxcompete = 4, maxsurrogate = 5, usesurrogate = 2, xval = 10,
surrogatestyle = 0, maxdepth = 30, ...)
#minisplit 指定节点分割的最小样本量
#minbucket 指定叶节点中的最小样本量
#maxcompete 指定分割变量的最大候选数目
#xval 指定交叉验证的重数
#maxdepth 指定决策树的最大深度
随机森林
集成的随机森林综合了多棵CART决策树。
算法的核心就是采用多棵决策树的投票机制,完成分类或者预测问题。
构建随机森林可以利用randomForest包中的randomForest函数。
randomForest(x, y=NULL, xtest=NULL, ytest=NULL, ntree=500,
mtry=if (!is.null(y) && !is.factor(y))
max(floor(ncol(x)/3), 1) else floor(sqrt(ncol(x))),
replace=TRUE, classwt=NULL, cutoff, strata,
sampsize = if (replace) nrow(x) else ceiling(.632*nrow(x)),
nodesize = if (!is.null(y) && !is.factor(y)) 5 else 1,
maxnodes = NULL,
importance=FALSE, localImp=FALSE, nPerm=1,
proximity, oob.prox=proximity,
norm.votes=TRUE, do.trace=FALSE,
keep.forest=!is.null(y) && is.null(xtest), corr.bias=FALSE,
keep.inbag=FALSE, ...)
#mtry 指定随机抽取的变量个数
一定要注意先选取随机森林算法中合理的mtry值:
# 导入第三方包 library(randomForest) #通过循环迭代的方式,选取随机森林算法中合理的mtry值 n <- ncol(train) set.seed(1234) err <- NULL for (i in 1:(n-1)){ rf <- randomForest(Survived ~ ., data = train, mtry = i) err <- c(err, mean(rf$err.rate)) # 每轮循环都保留500棵树的平均误差率 }

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)