キャレットが初めてのので、何をしているのかを完全に理解したいと思っています。その目的のために、method = "rf"のキャレットのtrain()関数を使用してrandomForest()モデルから得た結果を再現しようとしています。残念ながら、私は一致する結果を得ることができませんでした、私は何が見落としているのだろうかと思っています。randomForest()とキャレットのrandomForest(method = "rf")を使った結果が異なります。
また、randomForestがbootstrappingを使ってntreeのそれぞれに合わせてサンプルを生成し、out-of-bagの予測に基づいてエラーを推定すると、 "oob trainControl関数呼び出しで "boot"を実行します。これらのオプションは異なる結果を生成しますが、どちらもrandomForest()モデルと一致しません。
キャレット・パッケージのWebサイト(http://topepo.github.io/caret/index.html)と潜在的に関連すると思われるさまざまなStackOverflowの質問を読んだことがありますが、なぜキャレット・メソッド= "rf"モデルが異なる結果をもたらすのか理解できませんでしたrandomForest()からのあなたが提供できる可能性のあるあらゆる洞察に感謝します。
ここには、MASSパッケージのCO2データセットを使用した、複製可能な例があります。
library(MASS)
data(CO2)
library(randomForest)
set.seed(1)
rf.model <- randomForest(uptake ~ .,
data = CO2,
ntree = 50,
nodesize = 5,
mtry=2,
importance=TRUE,
metric="RMSE")
library(caret)
set.seed(1)
caret.oob.model <- train(uptake ~ .,
data = CO2,
method="rf",
ntree=50,
tuneGrid=data.frame(mtry=2),
nodesize = 5,
importance=TRUE,
metric="RMSE",
trControl = trainControl(method="oob"),
allowParallel=FALSE)
set.seed(1)
caret.boot.model <- train(uptake ~ .,
data = CO2,
method="rf",
ntree=50,
tuneGrid=data.frame(mtry=2),
nodesize = 5,
importance=TRUE,
metric="RMSE",
trControl=trainControl(method="boot", number=50),
allowParallel=FALSE)
print(rf.model)
print(caret.oob.model$finalModel)
print(caret.boot.model$finalModel)
には、次のものが生成されます
プリント(rf.model)
Mean of squared residuals: 9.380421
% Var explained: 91.88
プリント(caret.oob.model $ finalModel)
Mean of squared residuals: 38.3598
% Var explained: 66.81
プリント(caret.boot.model $ finalModel)
Mean of squared residuals: 42.56646
% Var explained: 63.16
そして、変数の重要度を見てコード:
importance(rf.model)
importance(caret.oob.model$finalModel)
importance(caret.boot.model$finalModel)
ショートキャレットとrandomForestモデルの動作を調べましたか?両方が類似した重要度を持つ非常に類似した重要な予測子を示している場合、他のバリエーションについてあまり心配する必要はありません。 –
こんにちはTim - あなたの時間と入力をありがとうございます。変数の重要性を見てきました(これを反映するために上記のコードを更新しました)、予測子の重みが異なります。たとえ体重がそれほど違っていなくても、私はまだその違いを引き起こしていたことを理解したいと思うでしょう。私が何かを説明できないとき、私はいつも私が知らないことを知らないことを心配しています! – ej5607
列車で式インターフェイスを使用すると、要因がダミーに変換されます。 randomForestと比較するには、非数式インタフェースを使用する必要があります。例えば、 'train(CO2 [、-5]、CO2 $ uptake、method =" rf "、...)' –