R 集成算法③ 随机森林

简介: 1.介绍如前文所述,随机森林目前拥有比较好的正确率,在各种数据中表现位于前列。随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。

1.介绍

如前文所述,随机森林目前拥有比较好的正确率,在各种数据中表现位于前列。随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本为那一类。在建立每一棵决策树的过程中,有两点需要注意 - 采样与完全分裂。对于行采样,采用有放回的方式,也就是在采样得到的样本集合中,可能有重复的样本。假设输入样本为N个,那么采样的样本也为N个。这样使得在训练的时候,每一棵树的输入样本都不是全部的样本,使得相对不容易出现over-fitting。
然后进行列采样。之后就是对采样之后的数据使用完全分裂的方式建立出决策树,这样决策树的某一个叶子节点要么是无法继续分裂的,要么里面的所有样本的都是指向的同一个分类。

按这种算法得到的随机森林中的每一棵都是很弱的,但是大家组合起来就很厉害了。我觉得可以这样比喻随机森林算法:每一棵决策树就是一个精通于某一个窄领域的专家,这样在随机森林中就有了很多个精通不同领域的专家,对一个新的问题(新的输入数据),可以用不同的角度去看待它,最终由各个专家,投票得到结果。

主要函数

R语言中的randomForest包可以实现随机森林算法的应用,该包中主要涉及5个重要函数,关于这5个函数的语法和参数请见下方:

  • formula指定模型的公式形式,类似于y~x1+x2+x3...;
  • data指定分析的数据集;
  • subset以向量的形式确定样本数据集;
  • na.action指定数据集中缺失值的处理方法,默认为na.fail,即不允许出现缺失值,也可以指定为na.omit,即删除缺失样本;
  • x指定模型的解释变量,可以是矩阵,也可以是数据框;y指定模型的因变量,可以是离散的因子,也可以是连续的数值,分别对应于随机森林的分类模型和预测模型。这里需要说明的是,如果不指定y值,则随机森林将是一个无监督的模型;
  • xtest和ytest用于预测的测试集;
  • ntree指定随机森林所包含的决策树数目,默认为500;
  • mtry指定节点中用于二叉树的变量个数,默认情况下数据集变量个数的二次方根(分类模型)或三分之一(预测模型)。一般是需要进行人为的逐次挑选,确定最佳的m值;
  • replace指定Bootstrap随机抽样的方式,默认为有放回的抽样;
  • nodesize指定决策树节点的最小个数,默认情况下,判别模型为1,回归模型为5;
  • maxnodes指定决策树节点的最大个数;
  • norm.votes显示投票格式,默认以百分比的形式展示投票结果,也可以采用绝对数的形式;
  • do.trace是否输出更详细的随机森林模型运行过程,默认不输出;

importance()函数

用于计算模型变量的重要性

importance(x, type=NULL, class="NULL", scale=TRUE, ...)

  • x为randomForest对象;

  • type可以是1,也可以是2,用于判别计算变量重要性的方法,1表示使用精度平均较少值作为度量标准;2表示采用节点不纯度的平均减少值最为度量标准。值越大说明变量的重要性越强;

  • scale默认对变量的重要性值进行标准化。

MDSplot()函数

用于实现随机森林的可视化

MDSplot(rf, fac, k=2, palette=NULL, pch=20, ...)

  • rf为randomForest对象,需要说明的是,在构建随机森林模型时必须指定计算临近矩阵,即设置proximity参数为TRUE;

  • fac指定随机森林模型中所使用到的因子向量(因变量);

  • palette指定所绘图形中各个类别的颜色;

  • pch指定所绘图形中各个类别形状;还可以通过R自带的plot函数绘制随机森林决策树的数目与模型误差的折线图

rfImpute()函数

可为存在缺失值的数据集进行插补(随机森林法),得到最优的样本拟合值

  • rfImpute(x, y, iter=5, ntree=300, ...)

  • rfImpute(x, data, ..., subset)

  • x为存在缺失值的数据集;

  • y为因变量,不可以存在缺失情况;

  • iter指定插值过程中迭代次数;

  • ntree指定每次迭代生成的随机森林中决策树数量;

  • subset以向量的形式指定样本集。

应用

  • 将数据集分为训练集和测试集,并查看数据集基本属性。数据为R自带IRIS数据
setwd("E:\\Rwork")
library(randomForest)
data("iris")
index <- sample(nrow(iris),0.75*nrow(iris))
train <- iris[index,]
test <- iris[index,]
  • 选取randomforest –mtry节点值,对应误差最小为2,一般可默认。通常也是2记得。mtry指定节点中用于二叉树的变量个数,默认情况下数据集变量个数的二次方根(分类模型)或三分之一(预测模型)。
n <- length(names(train))
set.seed(100)
library(tcltk)
pb<-tkProgressBar("进度","已完成 %",0,400) 
for (i in 1:(n-1)){
  info<- sprintf("已完成 %d%%", round(i*100/length(n)))  
  setTkProgressBar(pb, i*100/length(n), sprintf("进度 (%s)", info),info)
  mtry_fit <- randomForest(Species~.,data = train,mtry = i)
  error <- mean(mtry_fit$err.rate)
  print(error)
}

[1] 0.04328544
[1] 0.04293262
[1] 0.04588242
[1] 0.04616312
  • 选择最佳mtry
set.seed(100)
ntree_fit<-randomForest(Species~.,data=train,mtry=2,ntree=1000)
plot(ntree_fit)
img_20c14fc312f1867068c3f1161c523871.png
  • 选择ntree=200
rf <- randomForest(Species~., data = train ,mtry = 2 ,
                   ntree = 200,importance= TRUE)
                   )
rf

Call:
 randomForest(formula = Species ~ ., data = train, mtry = 2, ntree = 200,      importance = TRUE) 
               Type of random forest: classification
                     Number of trees: 200
No. of variables tried at each split: 2

        OOB estimate of  error rate: 4.44%
Confusion matrix:
           setosa versicolor virginica class.error
setosa         32          0         0  0.00000000
versicolor      0         29         2  0.06451613
virginica       0          2        25  0.07407407
  • 建立随机森林模型
importance <- importance(rf)
importance
importance
                setosa versicolor virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length  4.268225  0.2564647  7.822284             6.792504         7.123898
Sepal.Width   2.409402 -0.7655617  2.686758             2.304386         0.750602
Petal.Length 12.652948 15.2819119 17.274815            19.071343        23.149037
Petal.Width  14.672686 18.1435246 18.742883            21.238528        28.105741
varImpPlot(rf)
pred1<-predict(rf,data=train)
Freq1<-table(pred1,train$Species)
sum(diag(Freq1))/sum(Freq1)
[1] 0.9555556
img_71a25b3b67033e66cb73c5f2eba9c279.png
  • 重要性排名

  • 测试

table(actual=test$Species,predicted=predict(rf,newdata = test,type = "class"))
            predicted
actual       setosa versicolor virginica
  setosa         30          0         0
  versicolor      0         30         0
  virginica       0          0        30
目录
相关文章
|
2月前
|
机器学习/深度学习 算法 Python
随机森林算法是一种强大的集成学习方法,通过构建多个决策树并综合其结果进行预测。
随机森林算法是一种强大的集成学习方法,通过构建多个决策树并综合其结果进行预测。本文详细介绍了随机森林的工作原理、性能优势、影响因素及调优方法,并提供了Python实现示例。适用于分类、回归及特征选择等多种应用场景。
60 7
|
6月前
|
机器学习/深度学习 算法 前端开发
集成学习的力量:Sklearn中的随机森林与梯度提升详解
【7月更文第23天】集成学习,作为机器学习中一种强大而灵活的技术,通过结合多个基础模型的预测来提高整体预测性能。在`scikit-learn`(简称sklearn)这一Python机器学习库中,随机森林(Random Forest)和梯度提升(Gradient Boosting)是两种非常流行的集成学习方法。本文将深入解析这两种方法的工作原理,并通过代码示例展示它们在sklearn中的应用。
275 10
|
7月前
|
机器学习/深度学习 存储 人工智能
算法金 | 使用随机森林获取特征重要性
**随机森林算法简介**:集成多个决策树提升性能,常用于各类任务。在葡萄酒分类项目中,使用`RandomForestClassifier`实现模型,100棵树,得分100%。特征重要性显示了哪些化学成分影响最大。通过特征选择保持高准确性,证明了有效特征选择的重要性。7个关键特征中脯氨酸和酒精含量最重要。简洁高效,适用于特征工程。[链接指向知识星球]
78 5
|
7月前
|
机器学习/深度学习 数据采集 存储
算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全
**摘要:** 这篇文章介绍了决策树作为一种机器学习算法,用于分类和回归问题,通过一系列特征测试将复杂决策过程简化。文章详细阐述了决策树的定义、构建方法、剪枝优化技术,以及优缺点。接着,文章讨论了集成学习,包括Bagging、Boosting和随机森林等方法,解释了它们的工作原理、优缺点以及如何通过结合多个模型提高性能和泛化能力。文中特别提到了随机森林和GBDT(XGBoost)作为集成方法的实例,强调了它们在处理复杂数据和防止过拟合方面的优势。最后,文章提供了选择集成学习算法的指南,考虑了数据特性、模型性能、计算资源和过拟合风险等因素。
86 0
算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全
|
7月前
|
机器学习/深度学习 算法 前端开发
决策树与随机森林算法在分类问题中的应用
本文探讨了决策树和随机森林两种监督学习算法,它们在分类任务中表现出强大的解释性和预测能力。决策树通过特征测试进行分类,构建涉及特征选择、树生成和剪枝。随机森林是集成学习方法,通过构建多棵决策树并汇总预测结果,防止过拟合。文中提供了Python代码示例,展示如何使用sklearn构建和应用这些模型,并讨论了参数调优和模型评估方法,如交叉验证和混淆矩阵。最后,强调了在实际问题中灵活选择和调整模型参数的重要性。
242 4
|
6月前
|
机器学习/深度学习 数据采集 算法
Python实现随机森林回归模型(RandomForestRegressor算法)项目实战
Python实现随机森林回归模型(RandomForestRegressor算法)项目实战
|
7月前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】Voting集成学习算法:分类任务中的新利器
【机器学习】Voting集成学习算法:分类任务中的新利器
254 0
|
8月前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】集成学习算法的原理与应用
【4月更文挑战第30天】集成学习通过组合多个基学习器提升预测准确性,广泛应用于分类、回归等问题。主要步骤包括生成基学习器、训练和结合预测结果。算法类型有Bagging(如随机森林)、Boosting(如AdaBoost)和Stacking。Python中可使用scikit-learn实现,如示例代码展示的随机森林分类。集成学习能降低模型方差,缓解过拟合,提高预测性能。
127 3
|
8月前
|
机器学习/深度学习 算法 数据挖掘
数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
|
8月前
|
机器学习/深度学习 算法 Python
【Python 机器学习专栏】随机森林算法的性能与调优
【4月更文挑战第30天】随机森林是一种集成学习方法,通过构建多棵决策树并投票或平均预测结果,具有高准确性、抗过拟合、处理高维数据的能力。关键性能因素包括树的数量、深度、特征选择和样本大小。调优方法包括调整树的数量、深度,选择关键特征和参数优化。Python 示例展示了使用 GridSearchCV 进行调优。随机森林广泛应用于分类、回归和特征选择问题,是机器学习中的重要工具。
348 1