随机森林 R

随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。

随机森林重要的两个参数:

1、 树的节点预选的变量个数

2、随机森立中树的个数

理论介绍:

随机森林(Random Forest):https://www.cnblogs.com/maybe2030/p/4585705.html

(*)随机森林算法介绍及R语言实现https://blog.csdn.net/yawei_liu1688/article/details/78891050

Random Forest :https://blog.csdn.net/F_yuqi/article/details/54095477

随机森林--简单示例 : https://blog.csdn.net/u010694498/article/details/54629607

随机森林及CART的算法 : https://wenku.baidu.com/view/067cce2e4b35eefdc8d333bd.html?sxts=1545899245861


library(randomForest)
library(rpart)
library(rpart.plot)
library(rattle)

data("iris")

data.index = sample(c(1,2), nrow(iris), replace = T, prob = c(0.7, 0.3))
data.train = iris[which(data.index == 1),]
data.test = iris[which(data.index == 2),]


### step1:选择最优mtry参数值。 mtry是构建决策树分支时随机抽样的变量个数,可以遍历所有的变量,选择错误率最低的mtry取值 袋外错误率oob error最低
n = ncol(data.train)#计算数据集中自变量个数,总的特征数
err = c()

for (i in 1:(n-1)) {
  set.seed(1234)
  randomforest.mol = randomForest(Species~.,data=data.train,mtry=i,proximity=TRUE)
  err[i] = mean(randomforest.mol$err.rate)
  
}
m = which.min(err) ##选择平均误差最小的m mtry = 3
print(m)

##### step2:选择最优ntree参数值。ntree参数指出建模时决策树的数量,过高会增加复杂度,过低会增加错误率。以mtry=3进行随机森林建模,并将模型错误率与决策树的关系可视化。
set.seed(1234)
rf<-randomForest(Species~.,data=data.train,mtry=m,proximity=TRUE)    ## proximity:是否计算模型的临近矩阵,主要结合MDSplot()函数使用
plot(rf)

### step3: 建立随机森林模型
set.seed(1234)
iris_rf<-randomForest(as.factor(data.train$Species)~.,data=data.train,mtry=2,ntree=100,importance=TRUE,proximity=TRUE)
print(iris_rf)
MDSplot(iris_rf,fac=data.train$Species)

### step4: 输出变量重要性:分别从精确度递减和均方误差递减的角度来衡量重要程度。


importance<- importance(iris_rf) 
barplot(iris_rf$importance[,1],main="输入变量重要性测度指标柱形图")
box()

##  step4: 提取随机森林模型中以准确率递减方法得到维度重要性值。type=2为基尼系数方法

importance(iris_rf,type=1)

varImpPlot(x=iris_rf,sort=TRUE,n.var=nrow(iris_rf$importance),main="输入变量重要性测度散点图")
hist(treesize(iris_rf)) 


# 信息展示


##  step5 : 预测 
pred<-predict(iris_rf,newdata=data.test)
pred_out_1<-predict(object=iris_rf,newdata=data.test,type="prob") #输出概率 
table <- table(pred,data.test$Species) 
sum(diag(table))/sum(table) #预测准确率
plot(margin(iris_rf,data.test$Species),main=观测值被判断正确的概率图)

library(randomForest)
library(rpart)
library(rpart.plot)
library(rattle)

data("iris")

data.index = sample(c(1,2), nrow(iris), replace = T, prob = c(0.7, 0.3))
data.train = iris[which(data.index == 1),]
data.test = iris[which(data.index == 2),]


### step1:选择最优mtry参数值。 mtry是构建决策树分支时随机抽样的变量个数,可以遍历所有的变量,选择错误率最低的mtry取值 袋外错误率oob error最低
n = ncol(data.train)#计算数据集中自变量个数,总的特征数
err = c()

for (i in 1:(n-1)) {
  set.seed(1234)
  randomforest.mol = randomForest(Species~.,data=data.train,mtry=i,proximity=TRUE)
  err[i] = mean(randomforest.mol$err.rate)
  
}
m = which.min(err) ##选择平均误差最小的m mtry = 3
print(m)

##### step2:选择最优ntree参数值。ntree参数指出建模时决策树的数量,过高会增加复杂度,过低会增加错误率。以mtry=3进行随机森林建模,并将模型错误率与决策树的关系可视化。
set.seed(1234)
rf<-randomForest(Species~.,data=data.train,mtry=m,proximity=TRUE)    ## proximity:是否计算模型的临近矩阵,主要结合MDSplot()函数使用
plot(rf)

### step3: 建立随机森林模型
set.seed(1234)
iris_rf<-randomForest(as.factor(data.train$Species)~.,data=data.train,mtry=2,ntree=100,importance=TRUE,proximity=TRUE)
print(iris_rf)
MDSplot(iris_rf,fac=data.train$Species)

### step4: 输出变量重要性:分别从精确度递减和均方误差递减的角度来衡量重要程度。


importance<- importance(iris_rf) 
barplot(iris_rf$importance[,1],main="输入变量重要性测度指标柱形图")
box()

##  step4: 提取随机森林模型中以准确率递减方法得到维度重要性值。type=2为基尼系数方法

importance(iris_rf,type=1)

varImpPlot(x=iris_rf,sort=TRUE,n.var=nrow(iris_rf$importance),main="输入变量重要性测度散点图")
hist(treesize(iris_rf)) 


# 信息展示


##  step5 : 预测 
pred<-predict(iris_rf,newdata=data.test)
pred_out_1<-predict(object=iris_rf,newdata=data.test,type="prob") #输出概率 
table <- table(pred,data.test$Species) 
sum(diag(table))/sum(table) #预测准确率
plot(margin(iris_rf,data.test$Species),main=观测值被判断正确的概率图)

猜你喜欢

转载自blog.csdn.net/rojyang/article/details/85321244