Sélection des fonctionnalités et réglage des paramètres avec curseur pour la forêt aléatoire

12

J'ai des données avec quelques milliers de fonctionnalités et je souhaite effectuer une sélection récursive des fonctionnalités (RFE) pour supprimer celles qui ne sont pas informatives. Je le fais avec caret et RFE. Cependant, j'ai commencé à penser, si je veux obtenir le meilleur ajustement de régression (forêt aléatoire, par exemple), quand dois-je effectuer le réglage des paramètres ( mtrypour RF)? Autrement dit, si je comprends bien, le caret entraîne les RF à plusieurs reprises sur différents sous-ensembles de fonctionnalités avec un mode fixe. Je suppose que l'optimum mtrydevrait être trouvé une fois la sélection des fonctionnalités terminée, mais la mtryvaleur utilisée par le curseur influencera-t-elle le sous-ensemble de fonctionnalités sélectionné? L'utilisation de caret avec low mtryest bien sûr plus rapide.

J'espère que quelqu'un pourra m'expliquer cela.

Dmitri
la source
2
RF a une sélection de fonctionnalités intégrée robuste - pas besoin d'utiliser RFE pour que l'on puisse simplement régler la musique et en finir avec.
Yevgeny

Réponses:

11

Une chose que vous voudrez peut-être examiner est les forêts aléatoires régularisées, qui sont spécifiquement conçues pour la sélection des fonctionnalités. Cet article explique le concept et comment ils diffèrent des forêts aléatoires normales

Sélection d'entités via des arbres régularisés

Il existe également un package CRAN RRF basé sur randomForest qui vous permettra de les implémenter facilement dans R. J'ai moi-même eu de la chance avec cette méthodologie.

Concernant votre question initiale, le seul conseil que je puisse vous donner est que si vous avez beaucoup de colinéarité, vous devez utiliser des tailles d'arbre plus petites. Cela permet à l'algorithme de déterminer l'importance avec moins d'interférences dues aux effets de colinéarité.

Tom.Rampley
la source
1

Vous pourrez peut-être utiliser caretFuncs quelque chose comme ceci:

myRFE <- caretFuncs
myRFE$summary <- twoClassSummary  (default is defaultSummary)

rctrl <- rfeControl(method='repeatedcv', repeats=5, number=10,
                   functions=myRFE)

tctrl <- trainControl(method = "cv",
                      classProbs = TRUE,
                      summaryFunction = twoClassSummary)

rfeObj = rfe(x,y,sizes=seq(1,ncol(x),2),
             rfeControl=rctrl,  
             # to be passed to train()
             method='rf',
             importance=T,  # do not forget this
             ntree=1000,
             metric = "ROC",
             tuneLength = 10,
             # mtry=c(1,3,5,50),
             # specify the exact mtry, or tuneLength
             # can auto truncate the grid to minimal sizes (with or without warning)
             # p <- ncol(x) ... if (mtry < 1 || mtry > p) warning("invalid try: reset to within valid range") try <- max(1, min(p, round(try))) 
             trControl=tctrl)

En outre, on peut vérifier le valSelRFcolis. Je ne sais pas en quoi cela diffère de celui regularized random forestmentionné ici.

Jerry T
la source