2012-04-24 13 views
6

Necesito entrenar un modelo de regresión en un gran conjunto de ejemplos de entrenamiento , con el potencial de incorporar características arbitrarias. ¿Qué algoritmos de aprendizaje debo considerar y por qué?¿Qué algoritmo (s) de aprendizaje debería considerar para entrenar un modelo de regresión log-lineal?

Un breve resumen del problema:

  • Aproximadamente 5 millones de ejemplos de entrenamiento
  • Adición de ejemplos de entrenamiento a una tasa de 2-4 millones por año
  • ejemplos de entrenamiento actualmente contienen 10 funciones cada
  • Aproximadamente 400k funciones ocupadas (de un espacio de funciones total mucho más grande)
  • Funciones adicionales agregadas en el tiempo
  • Reconversión o adaptar el modelo (al menos) al día para incorporar nuevos ejemplos
  • criterios de optimización: mínimo error cuadrático porcentaje
  • de salida: un número único de valor real

tengo un poco de experiencia de formación log modelos lineales en problemas de clasificación de tamaño similar (utilizando SVM, perceptrones promediados y votados, etc.) La capacidad de agregar características arbitrarias es importante, pero en este caso, el tiempo de entrenamiento también es valioso.

Por ejemplo, mi único experimento hasta ahora con SVMLight tardó varias semanas en converger en un subconjunto de estos datos. Podríamos paralelizar en una máquina multinúcleo o (posiblemente) un clúster, pero tenemos que entrenar modelos en minutos. La capacitación en línea sería aún mejor.

He entrenado un modelo Promedio de Perceptron con éxito (y rápidamente). Sin embargo, que yo sepa, el AP no se aplica normalmente a la regresión. ¿Ofrece el AP alguna garantía de convergencia para un modelo de regresión? ¿Hay alguna otra razón formal que no debería ser aplicable? ¿O es una coincidencia razonable para mis requisitos?

¿Qué otras opciones debo investigar? Una SVM probablemente ofrecería una precisión superior, pero el tiempo de entrenamiento cuadrático no es aceptable. Si se puede acceder a los algoritmos SVM en tiempo lineal, eso podría funcionar bien.

ventajas potenciales:

  • de formación en línea
  • aplicación de código abierto disponible (idealmente en Java). Podemos implementar nuestra propia implementación si es necesario, pero lo evitaré si es posible.

Gracias por su aportación.

+0

Para la clasificación, he tenido mucho éxito con las SVM de descendencia de gradiente estocástica (http://leon.bottou.org/projects/sgd#) - es posible que desee ver cómo se adapta para la regresión. – etarion

Respuesta

7

Este es el problema clásico con SVM a gran escala. Un modelo SVM necesitaría ser reentrenado si se agregan nuevas características, y si se agregan nuevos datos si no está utilizando un svm en línea. Algunas opciones:

opciones prácticas (fuera de la plataforma):

LIBLINEAR - Si se puede hacer lineal SVM hay algunos algoritmos que aprovechan el núcleo lineal para proporcionar mejor que el tiempo de formación de segundo grado.Echa un vistazo a LIBLINEAR, que pertenece al mismo grupo de investigación que libsvm. Acaban de agregar la regresión en la versión 1.91 lanzada ayer. http://www.csie.ntu.edu.tw/~cjlin/liblinear/

Oracle ODM - Oracle tiene SVM disponible en su paquete ODM. Adoptan un enfoque práctico para proporcionar SVM "lo suficientemente bueno" sin pagar el costo computacional de encontrar una solución verdaderamente óptima. Ellos usan algunas técnicas de muestreo y selección de modelos - se puede encontrar información sobre eso aquí: http://www.oracle.com/technetwork/database/options/advanced-analytics/odm/overview/support-vector-machines-paper-1205-129825.pdf

SHOGUN - El SHOGUN aprendizaje automático Caja de herramientas está diseñado para el aprendizaje a gran escala, que interactúan con una serie de implementaciones de SVM, así como otros metodos. Nunca lo he utilizado pero podría ser digno de una mirada: http://www.shogun-toolbox.org

Kernel-machines.org tiene una lista de paquetes de software: la investigación http://www.kernel-machines.org/software

Otros SVM

Si está Buscando tirar la suya, hay una serie de técnicas para tratar de escalar SVM hasta grandes conjuntos de datos que se han publicado en documentos de investigación, pero el código no está necesariamente disponible, utilizable o mantenido como los ejemplos anteriores. Aseguran buenos resultados, pero cada uno tiene su propio conjunto de inconvenientes. Muchos implican hacer algún nivel de selección de datos. Por ejemplo, varios artículos de investigación utilizan algoritmos de clústeres de tiempo lineal para agrupar los datos y formar modelos de SVM sucesivos basados ​​en los clústeres, a fin de construir el modelo sin utilizar todos los datos. Core Vector Machines reclama un tiempo de entrenamiento lineal, pero hay algunas críticas sobre si su precisión es tan alta como dicen. Numerosos artículos utilizan diferentes algoritmos heurísticos para intentar seleccionar los candidatos al vector de soporte más probables. Muchos de estos son para la clasificación, pero probablemente podrían adaptarse a la regresión. Si desea obtener más información sobre algunas de estas investigaciones, puedo agregar algunas referencias.

Herramientas para los algoritmos de exploración de

probablemente ya estarán familiarizados con estos, pero pensé que había que tirarlo aquí por si acaso:

Hay otros algoritmos que tienen buena tiempo de ejecución en grandes conjuntos de datos, pero si van a funcionar bien es difícil de decir, depende de la composición de sus datos. Como el tiempo de ejecución es importante, comenzaría con los modelos más simples y trabajaría en los más complejos. ANN, regresión del árbol de decisión, métodos bayesianos, regresión lineal ponderada localmente, o un enfoque híbrido como árboles modelo, que es un árbol de decisión cuyos nodos hoja son modelos lineales, se pueden hacer más rápidamente que SVM en grandes conjuntos de datos y pueden producir Buenos resultados.

WEKA - Weka es una buena herramienta para explorar sus opciones. Usaría WEKA para probar subconjuntos de sus datos en diferentes algoritmos. El código fuente está abierto y en Java si eliges algo, puedes adaptarlo a tus necesidades. http://www.cs.waikato.ac.nz/ml/weka/

R - El lenguaje de programación R también implementa muchos algoritmos y es similar a la programación en Matlab. http://www.r-project.org/

No recomendaría usar WEKA o R como un conjunto de datos a gran escala, pero son herramientas útiles para tratar de reducir los algoritmos que pueden funcionar bien para usted.

+0

Gracias por la edición vitalik :) – karenu

+0

Gracias por la respuesta detallada. Votaría más de una vez si pudiera. ;-) Creo que miré LibLinear hace un tiempo cuando trabajaba en un problema relacionado, pero lo transmití por el tiempo de entrenamiento. No me di cuenta de que ahora soportaba el entrenamiento de tiempo lineal. Parece que podría ser una muy buena opción. – AaronD

+0

Lo siento, no dije que fuera tiempo lineal, solo mejor que cuadrático. Utiliza el kernel lineal. Proporciona una solución con precisión de eps en iteraciones O (log (1/eps)) a un costo de iteraciones O (ln) donde l es el número de puntos de entrenamiento yn es el número promedio de elementos distintos de cero por instancia. Por lo tanto, cuanto más escasos sean sus datos, más se acercará al tiempo lineal. – karenu

Cuestiones relacionadas