J'ai utilisé le package forestFloor
pour visualiser la structure du modèle de forêt aléatoire. Tout s'est bien passé jusqu'à ce que j'essaie d'utiliser forestFloor()
sur une sortie de forêt aléatoire du package caret
. J'ai besoin d'utiliser caret
au lieu de randomForest
pour mon ensemble de données car j'ai des classes gravement déséquilibrées, donc en utilisant la stratégie d'échantillonnage SMOTE. J'ai corrigé quelques choses, en passant keep.inbag=TRUE
et keep.forest=TRUE
en caret::train
, puis en trouvant l'objet randomForest
caché dans l'objet de classe train
, $finalModel
.Comment utiliser forestFloor() sur la sortie randomForest du paquet caret?
Je reçois toujours l'erreur: Error in eval(substitute(expr), envir, enclos) : index out of bounds
S'il vous plaît voir l'exemple de travail minimale suivante, tirée de l'ensemble de données du diabète Indiens Pima mlbench
. Merci d'avance!
> 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)
Avez-vous déjà trouvé une solution pour cela? – Pete900
Sorte de ... ce n'est pas l'ensemble du paquet 'caret', juste le rééchantillonnage SMOTE. Soren a répondu avec un correctif potentiel mais je ne l'ai pas encore essayé: https://github.com/sorhawell/forestFloor/issues/22 – bstock