R 中的 randomForest 算法中 xtest= 和 ytest= 有何作用?

mmm*_*mmm 5 r random-forest

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

train <- sample( 1:nrow(Boston), (nrow(Boston))/2) ) 编辑:在这里,train 显然只是一个索引,因此测试集如下:

testB <- Boston[-train,]; head(test); length(test) 响应变量的名称是 medy,它是第十四列。

我的随机森林也有以下代码(实际上我在这里装袋,因为我的数据集中的变量总数是 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)
Run Code Online (Sandbox Code Playgroud)

Str*_*keR 4

从文档randomForest

\n\n
\n

如果xtest给定,则随着树的生长,测试集的预测将在 \xe2\x80\x9cin place\xe2\x80\x9d 处完成。如果ytest也给定,并且do.trace设置为某个正整数,则对于每do.trace棵树,都会打印测试集错误。测试集的结果在结果对象的测试组件中返回randomForest。对于分类,投票组件(用于训练或测试集数据)包含针对类别收到的案例的投票。如果norm.votes=TRUE,则给出分数,可以将其视为类别的预测概率。

\n
\n\n

从这里可以理解,仅将响应变量传递给ytest参数,不会改变任何内容randomForest

\n\n

如果您希望该randomForest函数“就地”进行预测,即当树木生长时,您必须将不带预测变量的测试数据传递给xtest如下所示:

\n\n
bag.boston1 <- randomForest(medv~., data=Boston, subset=train, mtry=13, importance=TRUE, \n                            xtest=subset(testB, select=-medv))\n
Run Code Online (Sandbox Code Playgroud)\n\n

预测结果可以通过以下方式访问:bag.boston1$test$predicted

\n\n

由于在本例中您还有测试数据的响应变量,因此您可以使用ytest变量传递它:

\n\n
bag.boston2 <- randomForest(medv~., data=Boston, subset=train, mtry=13, importance=TRUE, \n                            xtest=subset(testB, select=-medv), ytest=testB$medv)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这种情况下,除了预测之外,我们还获得了一些附加值。mse对于均方误差和r 平方,它们rsq都是针对 的情况下生长的每一棵树regression。对于classification,它们是:err.rate,即每棵树的测试错误率,confusion对于混淆矩阵和votes给出每个输出类的投票数(或归一化投票数)。

\n\n

可以使用以下方式访问以上所有值:bag.boston2$test

\n