web-dev-qa-db-ja.com

R:キャレット、tuneGrid引数でレンジャーを使用する

caret パッケージを使用して、 ranger を使用して構築されたランダムフォレストモデルを分析しています。モデルパラメータを調整するためにtuneGrid引数を使用してtrain関数を呼び出す方法がわかりません。

私はtuneGrid引数を間違って呼び出していると思いますが、なぜそれが間違っているのか理解できません。任意の助けいただければ幸いです。

data(iris)

library(ranger)
model_ranger <- ranger(Species ~ ., data = iris, num.trees = 500, mtry = 4,
                       importance = 'impurity')


library(caret)

# my tuneGrid object:
tgrid <- expand.grid(
  num.trees = c(200, 500, 1000),
  mtry = 2:4
)

model_caret <- train(Species  ~ ., data = iris,
                     method = "ranger",
                     trControl = trainControl(method="cv", number = 5, verboseIter = T, classProbs = T),
                     tuneGrid = tgrid,
                     importance = 'impurity'
)
9
Mark

キャレットのレンジャーの構文は次のとおりです。

library(caret)

追加 .パラメータを調整する前:

tgrid <- expand.grid(
  .mtry = 2:4,
  .splitrule = "gini",
  .min.node.size = c(10, 20)
)

これらの3つだけがキャレットでサポートされ、ツリーの数はサポートされません。 trainでは、num.treesと重要度を指定できます:

model_caret <- train(Species  ~ ., data = iris,
                     method = "ranger",
                     trControl = trainControl(method="cv", number = 5, verboseIter = T, classProbs = T),
                     tuneGrid = tgrid,
                     num.trees = 100,
                     importance = "permutation")

変数の重要度を取得するには:

varImp(model_caret)

#output
             Overall
Petal.Length 100.0000
Petal.Width   84.4298
Sepal.Length   0.9855
Sepal.Width    0.0000

これが機能するかどうかを確認するには、ツリーの数を1000以上に設定します-適合は非常に遅くなります。変更後importance = "impurity"

#output:

             Overall
Petal.Length  100.00
Petal.Width    81.67
Sepal.Length   16.19
Sepal.Width     0.00

それが機能しない場合は、CRANから最新のレンジャーとgitハブからキャレットをインストールすることをお勧めします。

devtools::install_github('topepo/caret/pkg/caret')

木の数をトレーニングするには、lapplyまたはcreateMultiFoldsによって作成された固定折りたたみでcreateFoldsを使用できます。

[〜#〜] edit [〜#〜]:上記の例はキャレットパッケージバージョン6.0-84で機能しますが、ドットなしのハイパーパラメータの名前を使用しても機能します。

tgrid <- expand.grid(
  mtry = 2:4,
  splitrule = "gini",
  min.node.size = c(10, 20)
)
20
missuse