R中的randomForest算法中xtest =和ytest =做了什么?

时间:2015-02-21 02:14:12

标签: r random-forest

我正在使用随机林,我使用以下代码将数据拆分为训练集和测试集:

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)

1 个答案:

答案 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}}