R 随机森林分类公式的构造及预测

R 随机森林分类公式的构造及预测,r,R,我有以下代码: RFmodel = randomForest(as.factor(trainset[,55]) ~ . , trainset, ntree = ntree.array[i], mtry = mtry.array[j], maxnodes = maxnodes.array[k]) RFyhat = predict(RFmodel , testset[,-55]) RFyhat = as.numeric(levels(RFyhat)[RFyhat]) Testerr.randomfo

我有以下代码:

RFmodel = randomForest(as.factor(trainset[,55]) ~ . , trainset, ntree = ntree.array[i], mtry = mtry.array[j], maxnodes = maxnodes.array[k])
RFyhat = predict(RFmodel , testset[,-55])
RFyhat = as.numeric(levels(RFyhat)[RFyhat])
Testerr.randomforest[i,j,k] = sum(RFyhat != testset[,55])/length(testset[,55])
该代码在第二行中抛出一个错误,即:

eval(expr、envir、enclose)中出错:找不到对象“V55”


然而,奇怪的是,当我做两件事中的一件时,错误消失了,1)将第一行中的trainset[,55]更改为trainset$V55,2)将testset[,-55]更改为testset。然而,错误率略有不同(我想是因为在后者中,我使用testset[,55]作为自变量,但这只是我的猜测)。有谁能向我解释一下使用trainset[,55]和trainset$V55之间的区别,以及在这种情况下的正确用法吗?

这是因为您误用了R的公式接口。公式如下:

as.factor(trainset[,55]) ~ .
在数据集
trainset
内进行的评估将包括左侧作为响应,以及trainset中的所有变量作为预测值。这是因为您没有在左侧给出变量的名称,所以
被解释为所有“其他”,但在本例中所有“其他”都是所有,因为R在
列车集
中找不到称为“as.factor(列车集[,55])”的东西

您可能想做一些更像:

trainset$V55 <- as.factor(trainset$V55)
RFmodel = randomForest(V55 ~ . , trainset, ...)

它使用
物种
作为响应,但也将其作为预测因子。您可以通过查看生成的随机林对象的
$call
$terms
属性来验证这一点。

这是因为您误用了R的公式接口。公式如下:

as.factor(trainset[,55]) ~ .
在数据集
trainset
内进行的评估将包括左侧作为响应,以及trainset中的所有变量作为预测值。这是因为您没有在左侧给出变量的名称,所以
被解释为所有“其他”,但在本例中所有“其他”都是所有,因为R在
列车集
中找不到称为“as.factor(列车集[,55])”的东西

您可能想做一些更像:

trainset$V55 <- as.factor(trainset$V55)
RFmodel = randomForest(V55 ~ . , trainset, ...)

它使用
物种
作为响应,但也将其作为预测因子。您可以通过查看生成的随机林对象的
$call
$terms
属性来验证这一点。

谢谢!这帮了大忙。几个小问题:由于这是一个分类问题,我需要公式中的一个因子,因此为.factor(trainset[,55])。公式中的as.factor(trainset$V55)是否按预期工作,或者我是否需要实际将其转换为一个factor,然后运行模型?第二,当我使用predict()函数时,我是否需要将输入的数据集精确地限制为我需要的列,还是只使用模型公式中定义的自变量进行预测?非常感谢@贾斯汀(a)
as.系数(车组$V55)
应足够。(b) 您只需要确保模型中使用的所有内容(作为预测)都在测试集中;额外的变量应该被忽略。谢谢!这帮了大忙。几个小问题:由于这是一个分类问题,我需要公式中的一个因子,因此为.factor(trainset[,55])。公式中的as.factor(trainset$V55)是否按预期工作,或者我是否需要实际将其转换为一个factor,然后运行模型?第二,当我使用predict()函数时,我是否需要将输入的数据集精确地限制为我需要的列,还是只使用模型公式中定义的自变量进行预测?非常感谢@贾斯汀(a)
as.系数(车组$V55)
应足够。(b) 您只需要确保模型中使用的所有内容(作为预测)都在测试集中;应该忽略额外的变量。