I am not a quitter.

决策树是一个树状预测模型,它提供一个从观测到目标值的映射。决策树存在如下问题:(1)决策树算法在产生规则的时候采用了局部的贪婪方法,每次只选取一个属性进行分析构造决策树,所以分类规则相当复杂,针对此问题一般使用决策树剪枝的办法实现;(2)在搜索中不进行回溯,所以它容易收敛到非全局的局部最优解;(3)在学习中,由于分类器过于复杂,则它可能会过于适应噪声,从而导致过拟合的问题。

为了克服决策树的上述缺点,产生了随机森林算法。随机森林算法将单个分类器组合成多个分类器,生成多棵决策树,这些决策树不需要都有很高的分类精度,并让所有的决策树通过投票的形式进行决策。

随机森林算法有如下三个步骤:(1)为每棵决策树抽样产生训练集通过统计抽样技术从原始训练集中产生 N 个训练子集。随机森林算法采用 Bagging 抽样技术从原始训练集中产生N 个训练子集,每个训练子集的大小约为原始训练集的三分之二,每次抽样均为随机且放回抽样,这样使得训练子集中的样本存在一定的重复,这样做的目的是为了使森林中的决策树不至于产生局部最优解。(2)构建决策树为每一个训练子集分别建立一棵决策树,生成N棵决策树从而形成森林,每棵决策树不需要剪枝处理。由于随机森林在进行节点分裂时,不是所有的属性都参与属性指标的计算,而是随机地选择某几个属性参与比较。为了使每棵决策树之间的相关性减少,同时提升每棵决策树的分类精度,在进行节点分裂时,,不是将全部M个输入变量参与节点分裂,而是随机抽取指定logM +1个随机特征变量,从而达到节点分裂的随机性。(3)森林的形成随机森林算法最终的输出结果根据随机构建的N棵决策子树将对某测试样本进行分类,将每棵子树的结果汇总,所得票数最多的分类结果,将作为算法最终的输出结果。

随机森林的R实现randomForest

简单示例:

> data(iris)> iris.rf <- randomForest(iris[,-5], iris[,5], prox=TRUE)> iris.p <- classCenter(iris[,-5], iris[,5], iris.rf$prox)> plot(iris[,3], iris[,4], pch=21, xlab=names(iris)[3], ylab=names(iris)[4],+bg=c("red", "blue", "green")[as.numeric(factor(iris$Species))],+main="Iris Data with Prototypes")> points(iris.p[,3], iris.p[,4], pch=21, cex=2, bg=c("red", "blue", "green"))

set.seed(1)iris.rf <- randomForest(iris[,-5], iris[,5], proximity=TRUE)plot(outlier(iris.rf), type="h",col=c("red", "green", "blue")[as.numeric(iris$Species)])

版权声明:本文为博主原创文章,未经博主允许不得转载。

可以提高你的水平。(戏从对手来。

I am not a quitter.

相关文章:

你感兴趣的文章:

标签云: