Selección de características y ajuste de parámetros con caret para bosque aleatorio

12

Tengo datos con unos pocos miles de funciones y quiero hacer una selección de funciones recursivas (RFE) para eliminar las que no son informativas. Hago esto con caret y RFE. Sin embargo, comencé a pensar, si quiero obtener el mejor ajuste de regresión (bosque aleatorio, por ejemplo), ¿cuándo debo realizar el ajuste de parámetros ( mtrypara RF)? Es decir, según entiendo, caret entrena RF repetidamente en diferentes subconjuntos de características con una frecuencia fija. Supongo que el valor óptimo se mtrydebe encontrar una vez finalizada la selección de características, pero ¿influirá el mtryvalor que utiliza caret en el subconjunto de características seleccionado? Usar caret con low mtryes mucho más rápido, por supuesto.

Espero que alguien pueda explicarme esto.

Dmitri
fuente
2
RF tiene una robusta selección de funciones incorporadas: no es necesario usar RFE, por lo que uno puede sintonizar Mtry y listo.
Yevgeny

Respuestas:

11

Una cosa que quizás desee considerar son los bosques aleatorios regularizados, que están específicamente diseñados para la selección de características. Este artículo explica el concepto y cómo difieren de los bosques aleatorios normales

Selección de características a través de árboles regularizados

También hay un paquete CRAN RRF que se basa en randomForest que le permitirá implementarlos fácilmente en R. He tenido buena suerte con esta metodología.

Con respecto a su pregunta inicial, el único consejo que puedo dar es que si tiene mucha colinealidad, entonces necesita usar árboles más pequeños. Esto permite que el algoritmo determine la importancia con menos interferencia de los efectos de colinealidad.

Tom.Rampley
fuente
1

Es posible que pueda usar caretFuncs algo como esto:

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)

Además, uno puede consultar el valSelRFpaquete. No estoy seguro de cómo difiere de lo regularized random forestmencionado aquí.

Jerry T
fuente