如何随机选择一个子集来训练randomForest树并循环它?

时间:2014-01-01 06:57:14

标签: r loops random-forest

我是R的新生。我想使用随机森林来筛选哪个变量对于区分我的数据A或B很重要。但问题是我有100组A,但只有30组B.所以我想要随机选择20 A和20 B训练我的树,并使用剩余的80 A和10 B来测试我的树。然后循环它直到获得最好的树。 我在这里很新鲜,编写这些代码很麻烦

1 个答案:

答案 0 :(得分:1)

请考虑您可能最好的方法是a)提交支持此功能的small sample set {b} {b}}和b)。 randomForest中只列出了几个示例,但其中一个示例完全您所询问的内容。我将完全重新创建您的请求的第一部分:

data(iris)
table(iris$Species)

#this re-creates your data set
iris <- iris[!(iris$Species == "setosa"), ]
iris <- iris[21:100, ]
iris <- rbind(iris[iris$Species == "virginica", ], iris)
iris <- droplevels(iris)
table(iris$Species)
# versicolor  virginica 
# 30        100 

#this runs rf: sampsize is clearly the parameter you need
(iris.rf <- randomForest(Species ~ ., data = iris, ntree = 500, importance = T, 
                       sampsize=c(30, 30), do.trace = 100) )
# OOB estimate of  error rate: 6.92%
# Confusion matrix:
#   versicolor virginica class.error
# versicolor         27         3        0.10
# virginica           6        94        0.06

#there's no sample size here
(iris.rf.full <- randomForest(Species ~ ., data = iris, ntree = 500, importance = T, 
                         do.trace = 100) )
#Yep, the error rate seems a bit smaller
# OOB estimate of  error rate: 3.08%
# Confusion matrix:
#   versicolor virginica class.error
# versicolor         26         4   0.1333333
# virginica           0       100   0.0000000

但是,我提醒您注意这些步骤

  

并使用剩余的80 A和10 B来测试我的树。然后循环它   直到得到最好的树。

randomForest下不需要

:算法测试您的数据&#34;就地&#34;并循环它(如 ntree 参数所述)。尝试将 do.trace 参数设置为5,并查看OOB错误的反应。