¿Cuál es la forma más eficiente de entrenar datos usando menos memoria?

10

Estos son mis datos de entrenamiento: 200,000 Ejemplos x 10,000 Características. Entonces mi matriz de datos de entrenamiento es - 200,000 x 10,000.

Logré guardar esto en un archivo plano sin tener problemas de memoria guardando cada conjunto de datos uno por uno (un ejemplo tras otro) a medida que genero las características para cada ejemplo.

Pero ahora, cuando uso Milk , SVM light o cualquier otro algoritmo de Machine Learning, todo trata de cargar todos los datos de entrenamiento en la memoria en lugar de entrenarlos uno por uno. Sin embargo, solo tengo 8 GB de RAM, así que no puedo proceder de esta manera.

¿Sabes de todos modos que podría entrenar el algoritmo un conjunto de datos por un conjunto de datos? Es decir, en cualquier momento solo tengo un conjunto de datos cargado en la memoria, mientras entreno.

madCode
fuente
1
¿Qué quiere decir con "guardar cada conjunto de datos uno por uno"? ¿Te refieres a "cada línea de datos"? Si tiene múltiples conjuntos de datos, que guarda uno por uno, ¿por qué no cargarlos uno por uno y ajustar el algoritmo a cada uno?
Zach
1
¿Significa "un conjunto de datos por un conjunto de datos" línea por línea? Es decir, un conjunto de datos = 10000 características? Si ese es el caso, los algoritmos en línea pueden ser algo que está buscando, consulte: en.wikipedia.org/wiki/Online_algorithm y en.wikipedia.org/wiki/Online_machine_learning . Existe una versión en línea para muchos algoritmos de inclinación de máquina, por ejemplo SVM y bosques aleatorios.
Herra Huu
Gracias .. Zach y Herra. Edité la pregunta para definir uno por uno más claramente. Y sí, estaba pensando en el aprendizaje en línea, pero nunca pensé en los algoritmos en línea, déjenme leer sobre eso y probarlo.
madCode

Respuestas:

4

Creo que el término para este tipo de aprendizaje es aprendizaje fuera del núcleo . Una sugerencia es votepal wabbit , que tiene una biblioteca R conveniente , así como bibliotecas para muchos otros idiomas.

Zach
fuente
Tengo problemas de dependencias con boost mientras lo instalo. ¿Tienes alguna idea de por qué me sale esto? bit.ly/L939DO
madCode
@madCode En realidad nunca utilicé el Widgetpal Wabbit, así que no puedo ayudarte a instalarlo. Escuché que su lista de correo es excelente, y estoy seguro de que puede encontrar ayuda allí para configurarla.
Zach
Hola ... Zach. Funcionó bien. Lo instalé e incluso me dio predicciones. gracias :-)
madCode
1

Apoyo de todo corazón la sugerencia de Zach. El Wrangpal Wabbit es una excelente opción, y su velocidad lo sorprendería. Un conjunto de datos de 200k por 10k no se considera grande por las normas de vocales wabbit.

votepal_wabbit (disponible en forma de fuente a través de https://github.com/JohnLangford/vowpal_wabbit , una versión anterior está disponible como un paquete estándar en el universo de Ubuntu) es un aprendizaje en línea lineal + bilineal rápido, con una entrada muy flexible. Puede mezclar características binarias y numéricas. No es necesario numerar las características, ya que los nombres de las variables funcionarán "tal cual". Tiene un montón de opciones, algoritmos, reducciones, funciones de pérdida y una gran flexibilidad en general. Puede unirse a la lista de correo (encuéntrela a través de github) y hacer cualquier pregunta. La comunidad es muy eficiente y solidaria.

arielf
fuente
1

Respondí una pregunta similar aquí . El punto es que la mayoría de los algoritmos de aprendizaje automático / minería de datos son aprendices por lotes, es decir, cargan todos los datos en la memoria. Por lo tanto, necesita herramientas diferentes para conjuntos de datos muy grandes como los que tiene. Vea las herramientas de esas preguntas también.

El aprendizaje en línea es una forma de reducir la huella de memoria de los algoritmos.

Atilla Ozgur
fuente