我正在使用随机林,我使用以下代码将数据拆分为训练集和测试集:
train <- sample( 1:nrow(Boston), (nrow(Boston))/2) )
编辑:在这里,火车显然只是一个索引,因此测试集如下:
testB <- Boston[-train,]; head(test); length(test)
响应变量的名称是medy,它是第14列。
我的随机森林也有以下代码(实际上我在这里装袋,因为我的数据集中的变量总数是13):
bag.boston1 <- randomForest(medv~., data=Boston, subset=train, mtry=13,
importance=TRUE, ytest=testB$medv, xtest= )
我对ytest =选项的论证是否正确?我假设是因为它只是测试数据集中的响应变量。
另外,我应该为xtest =选项使用什么参数?
我的一个想法就是从测试数据集中消除响应变量,从而仅在测试数据集中创建数据帧预测变量,然后我可以将xtest参数作为结果x矩阵:
`x <- testB`
x[14] <- NULL # because the 14th column is the response variable
bag.boston1 <- randomForest(medv~., data=Boston, subset=train, mtry=13,
importance=TRUE, ytest=testB$medv, xtest=x)
答案 0 :(得分:3)
来自randomForest
的文档:
如果给出
xtest
,则随着树的生长,对“测试集”的预测“就地”完成。如果还给出ytest
,并且do.trace
设置为某个正整数,则对于每个do.trace
树,都会打印测试集错误。测试集的结果将在生成的randomForest
对象的测试组件中返回。对于分类,投票组件(用于培训或测试集数据)包含案例为类收到的投票。如果norm.votes=TRUE
,则给出分数,可以将其视为类的预测概率。
从这里可以理解,只将响应变量传递给ytest
参数,并不会改变randomForest
的工作方式。
如果您希望randomForest
函数进行预测&#34;就位#34;,即树木生长时,您必须将没有预测变量的测试数据传递给xtest
像这样的论点:
bag.boston1 <- randomForest(medv~., data=Boston, subset=train, mtry=13, importance=TRUE,
xtest=subset(testB, select=-medv))
可以通过以下方式访问预测结果:bag.boston1$test$predicted
由于在这种情况下你也有测试数据的响应变量,你可以使用ytest
变量传递它:
bag.boston2 <- randomForest(medv~., data=Boston, subset=train, mtry=13, importance=TRUE,
xtest=subset(testB, select=-medv), ytest=testB$medv)
在这种情况下,除了预测之外,我们还会得到一些额外的值。它们对于均方误差为mse
,对于r平方为rsq
,对于在regression
情况下生长的每棵树都是classification
。对于err.rate
,它们是:confusion
,即每棵树的测试错误率,混淆矩阵的votes
和投票计数的bag.boston2$test
(或规范化的投票计数) )为每个输出类。
可以使用以下方法访问以上所有值:{{1}}