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