Estoy usando el paquete de fiesta en R con 10,000 filas y 34 características, y algunas características de factor tienen más de 300 niveles. El tiempo de computación es demasiado largo. (Ha tomado 3 horas hasta ahora y aún no ha terminado).
Quiero saber qué elementos tienen un gran efecto en el tiempo de cálculo de un bosque aleatorio. ¿Tiene factores con demasiados niveles? ¿Existen métodos optimizados para mejorar el tiempo de computación de RF?
r
random-forest
Chenghao Liu
fuente
fuente
Debido a que randomForest es una colección de carros independientes entrenados en un subconjunto aleatorio de características y registros, se presta a la paralelización. La
combine()
función en el paquete randomForest unirá bosques capacitados de forma independiente. Aquí hay un ejemplo de juguete. Como dice la respuesta de @mpq, no debe usar la notación de fórmula, sino pasar un marco de datos / matriz de variables y un vector de resultados. Desvergonzadamente los saqué de los documentos.Pasé la función combinada randomForest al parámetro .combine de nombre similar (que controla la función en la salida del bucle. El lado negativo es que no obtienes una tasa de error OOB o una importancia más trágicamente variable.
Editar:
Después de volver a leer la publicación, me doy cuenta de que no hablo nada sobre el problema del factor 34+. Una respuesta total no pensada podría ser representarlos como variables binarias. Ese es cada factor de una columna que está codificada como factor de nivel 0/1 sobre su presencia / no presencia. Al hacer una selección variable de factores sin importancia y eliminarlos, podría evitar que su espacio de características crezca demasiado.
fuente
Sugeriría un par de enlaces:
1) Reducir el número de niveles de una variable de factor es un enlace a una pregunta
stackoverflow
para tratar un problema similar mientras se usa elrandomForest
paquete. Específicamente, se trata de usar solo los niveles más frecuentes y asignar un nuevo nivel a todos los demás niveles menos frecuentes.La idea surgió de aquí: 2009 KDD Cup Slow Challenge . Los datos para esta competencia tenían muchos factores con muchos niveles y discute algunos de los métodos que usaron para reducir los datos de 50,000 filas por 15,000 columnas para ejecutar en una computadora portátil de 2 núcleos / 2GB RAM.
Mi última sugerencia sería mirar cómo se ejecuta el problema, como se sugirió anteriormente, en paralelo en una instancia de Amazon EC2 de alta CPU.
fuente
No puedo hablar de la velocidad de algoritmos específicos en R, pero debería ser obvio lo que está causando un tiempo de cómputo prolongado. Para cada árbol en cada rama, CART está buscando la mejor división binaria. Entonces, para cada una de las 34 características, la mayoría mira las divisiones dadas por cada uno de los niveles de las variables. Multiplique el tiempo de ejecución para cada división en un árbol por la cantidad de ramas en el árbol y luego multiplíquelo por la cantidad de árboles en el bosque y tendrá un tiempo de ejecución prolongado. ¿Quién sabe? ¿Quizás incluso con una computadora rápida esto podría llevar años terminar?
Creo que la mejor manera de acelerar las cosas sería agrupar algunos de los niveles para que cada variable baje a entre 3 y 5 niveles en lugar de 300. Por supuesto, esto depende de poder hacer esto sin perder importantes información en sus datos.
Después de eso, tal vez podría mirar para ver si hay algún algoritmo inteligente que pueda acelerar el tiempo de búsqueda para dividirse en cada nodo de los árboles individuales. podría ser que en un árbol en particular la búsqueda dividida sea una repetición de una búsqueda ya realizada para un árbol anterior. Entonces, si puede guardar las soluciones de las decisiones divididas anteriores e identificar cuándo está repitiendo, tal vez esa estrategia podría ahorrar un poco en tiempo de computación.
fuente