ランダムなフォレストモデルの構造を視覚化するためにforestFloor
パッケージを使用しています。 caret
パッケージのランダムフォレスト出力でforestFloor()
を使用しようとするまで、すべてがうまくいっていました。私はひどく不均衡なクラスを持っているので、SMOTEサンプリング戦略を使用しているのでrandomForest
の代わりにcaret
を使用する必要があります。私はいくつかの問題を修正し、caret::train
にkeep.inbag=TRUE
とkeep.forest=TRUE
を渡して、train
クラスオブジェクトに隠されたrandomForest
オブジェクトを見つけました。$finalModel
。caretパッケージのrandomForest出力にforestFloor()を使用するにはどうすればよいですか?
私はまだエラーを取得: Error in eval(substitute(expr), envir, enclos) : index out of bounds
mlbench
でピマインディアン糖尿データセットから取られ、次の最小限の作業例を参照してください。前もって感謝します!
> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.5 LTS
other attached packages:
[1] DMwR_0.4.1 caret_6.0-70 ggplot2_2.1.0
[4] lattice_0.20-34 forestFloor_1.9.5 randomForest_4.6-12
[7] mlbench_2.1-1
library(mlbench)
library(randomForest)
library(forestFloor)
data(PimaIndiansDiabetes)
y = PimaIndiansDiabetes$diabetes
X = PimaIndiansDiabetes
X = X[,!names(X)=="diabetes"]
rf.randomForest = randomForest(X,y,sampsize=25,ntree=5000,mtry=4,
keep.inbag = T,keep.forest = T)
## Use forestFloor on randomForest output, works great
ff = forestFloor(rf.randomForest,X,binary_reg = T,calc_np=T)
Col = fcol(ff,cols=1,outlier.lim = 2.5)
plot(ff,col=Col,plot_GOF = T)
## Now fit random forest using SMOTE from caret package
ctrl <- trainControl(method = "cv", number=5,
classProbs = TRUE,
summaryFunction = twoClassSummary,
sampling = "smote")
rf.SMOTE <- train(x=X,y=y,
method = "rf",
tuneGrid = data.frame(mtry = 3),
metric = "ROC",
trControl = ctrl,
keep.inbag=TRUE,
keep.forest=TRUE)
rf.caret <- rf.SMOTE$finalModel
## Use forestFloor on caret output, throws error
ff = forestFloor(rf.caret,X,binary_reg = T,calc_np=T)
この問題を修正したことがありますか? – Pete900
一種...「キャレット」パッケージ全体ではなく、SMOTEリサンプリングだけです。ソレン氏は潜在的な修正について回答しましたが、まだ試していません:https://github.com/sorhawell/forestFloor/issues/22 – bstock