7 votos

La combinación de los resultados de (GBM o cualquier otro) modelo basado en muestras procedentes de una base de datos muy grande

¿Cómo se combinan los resultados del modelo se realiza en muestras al azar de un conjunto de datos muy grande?

Necesito un modelo de una base de datos muy grande en R (~75 millones de filas) que no pueden ser cargados directamente en la memoria. Todavía estoy en la fase de planificación.

Mi primera idea fue la de dividir el conjunto de datos en conjuntos de datos más pequeños mediante muestreo aleatorio sin reemplazo. Entonces yo podría correr el bosque aleatorio del modelo en los conjuntos de datos por lotes y, a continuación, combinar los resultados. Creo que este enfoque podría dar resultados razonables.

Me preguntaba si sería posible hacer el mismo enfoque con el modelo de GBM? He leído la documentación y en cada iteración depende de la anterior (a diferencia de bosque aleatorio) y por lo tanto no sé cómo los resultados pueden ser combinados en la final.

¿Conoce usted los principios de la estadística se utiliza para combinar los resultados de un modelo en una aplicación en paralelo? Estoy interesado en general, los métodos, no sólo específica para GBM.

4voto

Bou Puntos 1859

Este documento sigue un enfoque muy similar a la que sugieren, pero que estratificar las muestras. En su caso, cada modelo se ve una parte determinada del espacio geográfico, que permite que los diferentes submodelos se especializan. Las figuras 6 y 8 muestran que esto puede conducir a mejores resultados que tratar de encajar todo el país con un único modelo.

No he leído el documento en detalle, pero cuando hablé con el primer autor acerca de que la semana pasada, parecía indicar que no apetece procedimiento era necesario para combinar los resultados, se tomó el promedio de predicción de todos los modelos pertinentes.

1voto

VarLogRant Puntos 284

No se muy bien la respuesta que está buscando, pero...

¿Usted realmente necesita para utilizar esa cantidad de datos? Cómo muchos predictores tienen? Si el número de factores es pequeño, como mucho de los datos es redundante y se acaba de llenar en el predictor espacio? Es relevante? Hay datos que no están realmente en el dominio de aplicación del modelo (es decir, 20 años de edad de los casos)? Sólo porque usted tiene esto no significa que usted debe utilizar.

Me gustaría ejemplo, los datos basados en la similitud de venir para arriba con un subconjunto de puntos que están más disímiles de los otros puntos n el conjunto de entrenamiento.

Por último, ¿por qué usar un árbol de ensemble método? Me encanta RF pero es tal vez el modelo que le dará el mayor espacio posible (es decir, miles de grandes unpruned árboles). Trate de 100 bolsas de árboles si desea utilizar un árbol de conjunto. Diablos, impulsado C5 árboles, probablemente se necesitará un número mucho menor de iteraciones que CARRO-como potenciar los métodos (por lo que he visto hasta ahora)

Usted puede tener ninguna idea de entrar en este proceso, que modelo será mejor o incluso lo suficientemente bueno. De nuevo, esto depende de la $p$, pero hay que empezar con alto sesgo de modelos (LDA, la regresión logística, naive Bayes) y ver lo que puede obtener de ellos, antes de llevar a cabo la grande, complejo, computacional caro (o imposible) de herramientas. Trate de regresión logística con cubic splines de suavizado a la aproximación de cualquier no-linearities.

1voto

nbubis Puntos 116

En el espíritu de la utilización de resúmenes para evitar el uso de todos los datos. Se puede ir muy distinto al de su solicitud original. Sólo una muy ingenua manera de empezar - esto probablemente podría ser hecho en una muy grande Postgres instancia. Esta es una exploración inicial paso para que se utiliza crudo sumas y cuenta a la hora de conseguir unas ideas. usted obtener algo de energía muy eficiente suma/contador de capacidades de un gestor de base de datos y utilizarla para hacer algunos análisis aproximado. Yo soy de una base de datos y masivamente paralelo con el análisis de los datos de fondo así que toma esto como un poco de un stat novatos enfoque, (tengo un MS en Appl Matemáticas no se utiliza activamente hasta hace muy poco)

Así que con todas esas advertencias que aquí va

a) considerar ingenuamente, los atributos (fecha, itemsold, precio, código postal) como columnas de su tabla. Estoy seguro de que usted tiene más, pero vamos a centrarnos en estas.

b) crear una tabla secundaria en la base de datos mediante la suma de todos los $ amts para un día de ventas por sabías que ahora puedes (fecha, dailysales, código postal). Algunos simple SQL ( select fecha, código postal, sum(precio) como dailysales from tabla group by .... recibe usted esta tabla.

Un mucho tabla más pequeña con 365 filas por código postal X # de zipcodes en sus datos.
Utilice esta tabla para exploraciones iniciales y también cuando muestra que usted puede utilizar esto como una verificación de la realidad.

Dependiendo de cuánto de la CPU y la memoria que dar este paso puede tardar minutos u horas. Sugieren no probarlo en un ordenador portátil (me tocó mi placa base después de un par de 100 pistas de tamaño similar problema en un circa 2005 portátil de vuelta :-) )

c) para cada código postal por separado hacer "el favorito de regresión", (dailysales de la variable dependiente, fecha de la variable independiente). Ver el MADlib proyecto http://MADlib.net si usted desea hacer esto en su lugar (MADlib hace en el análisis de bases de datos mediante la incorporación de C++ de matemáticas, de la matriz y las estadísticas de libs en Postgres)

d) una parcela por código postal, 365 puntos de datos (si usted tiene datos diarios) - buscar para aumentar, disminuir o no concluyentes. o simplemente obtener los coeficientes de correlación y la partición en tres cubos de +, - y "dontknow".

Esto permite separar, a través de Pareto pensamiento, el top 20 (o 10 o ..) en los códigos postales con el mayor aumento en las ventas por % y por $amt. Similar para la mayoría de disminuir ...

Usted puede ahora por separado creación de estrategias para profundizar la creciente, no concluyentes, y la disminución de los cubos de zipcodes, en un "divide y vencerás" de la moda.

MADlib también le permite ejecutar en la base de datos de R rutinas a través de PL/R pero por Lineal/de Regresión Logística y SVM embedded C++ es unas 100 veces más rápido. C4.5 también está disponible.

Si el tamaño de los datos se hace demasiado grande para Postgres (no creo que sea así, pero sólo en el caso), entonces existe la Greenplum MPP de la base de datos. Por 75 millones de filas debe ser capaz de hacer esto en un X-Gran instancia de EC2 o similar, con Postgres.

Si usted no quiere hacer esto en un dbms hay maneras de escribir algo de código de Python y iterar sobre el archivo de disco o tabla de base de datos tirando de un par de miles o cientos de miles de filas de una vez en memoria. Si usted no poner en Postgres hay maneras de obtener pequeñas muestras aleatorias de las filas.

Espero que esto tiene algún sentido, o al menos no es una tontería completa en su contexto :-)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X