2012-04-05 16 views
5

que tiene un gran conjunto de datos en R (1M + 6 filas por columnas) que desea utilizar para entrenar a un bosque aleatorio (usando el paquete randomForest) para fines de regresión. Por desgracia, me sale un error Error in matrix(0, n, n) : too many elements specified cuando se trata de hacerlo todo a la vez y no puede asignar suficiente memoria tipo de errores cuando se ejecuta en un subconjunto de los datos - hasta 10.000 o más observaciones.bosque aleatorio en un gran conjunto de datos

Al ver que no hay posibilidad de que pueda agregar más RAM en mi máquina y los bosques aleatorios son muy adecuados para el tipo de proceso que estoy tratando de modelar, realmente me gustaría hacer que esto funcione.

alguna sugerencia o idea de solución son muy apreciados.

+0

Ejecutar con 'proximidad = FALSE como [Joran] (http://stackoverflow.com/users/324364/joran) sugirió y nos dirá si funciona. – smci

+0

Una manera relativamente simple de resolver su problema sería subconjunto de su matriz de entrada. Toda esa información probablemente no le dará un modelo mejor que uno con un subconjunto de tamaño 10K x 10K. –

+1

¿Echó un vistazo a la biblioteca (h2o)? Eso funciona bien para problemas muy grandes, ver http://www.r-bloggers.com/benchmarking-random-forest-implementations/ –

Respuesta

11

Lo más probable es que pide randomForest para crear la matriz de proximidad para los datos, que si se piensa en ello, habrá increíblemente grande: 1 millón de x 1 millón. Se requeriría una matriz de este tamaño sin importar qué tan pequeño establezca sampsize. De hecho, basta con buscar en Google el mensaje de error parece confirmar esto, como el autor del paquete states que el único lugar en todo el código fuente donde se encuentra n,n) está en el cálculo de la matriz de proximidad.

Pero es difícil para ayudar más, dado que usted ha dado detalles sobre el código real que está utilizando.

+0

Llegué a la misma conclusión pero no entiendo por qué es necesario y si hay alguna manera de entrenar la RF sin la necesidad de ella. – ktdrv

+1

No estoy seguro de lo que quieres decir. Establecer proximidad = FALSO evitará que se calculen las proximidades. – joran

+0

Acabo de hacer una prueba y en realidad es el bosque en sí mismo el que es enorme. En mi caso de prueba en particular, 'keep.forest = F' da como resultado 14MB, mientras que' proximity = FALSE' no marca la diferencia de entrada o salida: el resultado fue 232 MB. – Wayne

1

Recomendaría el bigrfpackage en R, ya que está diseñado para el tipo de problema que ha encontrado (es decir, falta de suficiente RAM). Desafortunadamente, en este momento, bigrf ha sido eliminado de CRAN, pero todavía está disponible en los archivos (ver respuesta: Can't install bigrf package).

Otro enfoque puede implicar la combinación de RF en función de diferentes datos de entrenamiento, pero los resultados pueden considerarse sin sentido (para más información, ver respuesta: Combining random forests built with different training sets in R). La modificación mencionada en este último post me sirvió, pero los RF combinados que ejecuté eran a veces mejores, y algunas veces peores en relación con el uso de un solo RF (YMMV).

+0

Podría estar malentendiendo, pero creo que se supone que el paquete 'bigrf' maneja las regresiones. http://finzi.psych.upenn.edu/library/bigrf/html/bigrf-package.html – neanderslob

+0

tiene razón: leí mal el resumen de su paquete. Editando mi respuesta original. ¡Gracias! – Prophet60091

Cuestiones relacionadas