1

私は次のコードを持っています:

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])

このコードは2行目にエラーをスローします。つまり、次のようになります。

eval(expr、envir、enclos)のエラー:オブジェクト'V55'が見つかりません

ただし、不思議なことに、1)最初の行のtrainset [、55]をtrainset $ V55に変更し、2)testset [、-55]をtestsetに変更すると、エラーが消えます。ただし、エラー率はわずかに異なります(後者では、独立変数としてtestset [、55]を使用しているためですが、それは私が推測していることです)。誰かがtrainset[、55]とtrainset $ V55の使用の違いは何であり、このシナリオでの適切な使用法は何であるかを私に説明できますか?

4

1 に答える 1

5

これは、Rの数式インターフェイスを誤用しているためです。式:

as.factor(trainset[,55]) ~ .

データセット内で評価されるのtrainsetは、応答として左側を含み、予測子としてトレインセット内のすべての変数を含みます。これは、左側に変数の名前を指定していないため、.はすべて「else」と解釈されますが、この場合、Rは「as」と呼ばれるものを見つけることができないため、すべて「else」がすべてです。 factor(trainset [、55])"in trainset

あなたはおそらくもっと次のようなことをしたかったでしょう:

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

この間違いの結果の1つはV55、応答と予測子の両方として含めていることです。エラー率が0%になっているだけではないことに驚いています。これは、この例で同等のことを行ったときに発生します。

rf <- randomForest(as.factor(iris[,5]) ~ ., data=iris)

これはSpecies応答として使用されますが、予測子としても含まれます。$call結果のランダムフォレストオブジェクトのor$terms属性を確認することで、それを確認できます。

于 2012-04-25T15:24:37.443 に答える