Tengo un conjunto de datos con aproximadamente 70 variables que me gustaría reducir. Lo que estoy buscando hacer es usar CV para encontrar las variables más útiles de la siguiente manera.
1) Seleccione aleatoriamente digamos 20 variables.
2) Use stepwise
/ LASSO
/ lars
/ etc para elegir las variables más importantes.
3) Repita ~ 50x y vea qué variables se seleccionan (no se eliminan) con mayor frecuencia.
Esto está en la línea de lo randomForest
que haría, pero el rfVarSel
paquete parece funcionar solo para factores / clasificación y necesito predecir una variable dependiente continua.
Estoy usando R, por lo que cualquier sugerencia idealmente se implementaría allí.
r
cross-validation
feature-selection
random-forest
stepwise-regression
Chillido búho
fuente
fuente
Respuestas:
Creo que lo que describe ya está implementado en el
caret
paquete. Mire larfe
función o la viñeta aquí: http://cran.r-project.org/web/packages/caret/vignettes/caretSelection.pdfAhora, dicho eso, ¿por qué necesita reducir la cantidad de funciones? De 70 a 20 no es realmente un orden de disminución de magnitud. Creo que necesitaría más de 70 funciones antes de tener una firma previa y creer que algunas de las funciones realmente y realmente no importan. Pero, de nuevo, ahí es donde entra un prior subjetivo, supongo.
fuente
No hay ninguna razón por la que la frecuencia de selección de variables proporcione información que aún no obtenga de la aparente importancia de las variables en el modelo inicial. Esto es esencialmente una repetición de significación estadística inicial. también está agregando un nuevo nivel de arbitrariedad al intentar decidir un límite para la frecuencia de selección. La selección de variables de remuestreo está gravemente dañada por la colinealidad además de los otros problemas.
fuente
He revisado mi respuesta de hoy más temprano. Ahora he generado algunos datos de ejemplo en los que ejecutar el código. Otros han sugerido acertadamente que considere usar el paquete de caret, con lo que estoy de acuerdo. En algunos casos, sin embargo, puede que sea necesario escribir su propio código. A continuación, he intentado demostrar cómo usar la función sample () en R para asignar aleatoriamente observaciones a pliegues de validación cruzada. También utilizo los bucles para realizar una preselección variable (usando una regresión lineal univariada con un valor de corte indulgente p de 0.1) y la construcción de modelos (usando regresión por pasos) en los diez conjuntos de entrenamiento. Luego puede escribir su propio código para aplicar los modelos resultantes a los pliegues de validación. ¡Espero que esto ayude!
Antes de realizar la validación cruzada, es importante que lea sobre su uso adecuado. Estas dos referencias ofrecen excelentes discusiones sobre validación cruzada:
Estos documentos están dirigidos a bioestadísticos, pero serían útiles para cualquiera.
Además, siempre tenga en cuenta que usar la regresión por pasos es peligroso (aunque usar la validación cruzada debería ayudar a aliviar el sobreajuste). Una buena discusión sobre la regresión por pasos está disponible aquí: http://www.stata.com/support/faqs/stat/stepwise.html .
¡Dejame saber si tienes algunas preguntas adicionales!
fuente
Acabo de encontrar algo bueno aquí: http://cran.r-project.org/web/packages/Causata/vignettes/Causata-vignette.pdf
Pruebe esto tal vez cuando use el paquete glmnet
fuente