¿Cómo deben normalizarse los datos de entrada al entrenar un SVM con un algoritmo en línea?

Asumiré que cuando dices “entrenar SVM con un algoritmo en línea” estás ajustando un SVM lineal usando el descenso de gradiente estocástico (o una de sus variantes, como Pegasos [1] o gradientes truncados [2], por ejemplo).

En ese caso, es muy importante tener la entrada bien condicionada: esto significa centrar (eliminación de la media en función de los componentes) y escalar (división en función de los componentes por la desviación estándar para obtener la varianza unitaria). Además, puede blanquear los datos con un PCA / SVD para eliminar la correlación lineal entre los componentes. Hay disponibles más trucos para un SGD eficiente (por ejemplo, cómo elegir la tasa de aprendizaje inicial y cómo programar su evolución) en [3].

En cuanto a la implementación de centrado, escalado y blanqueamiento con datos en línea cuando tiene un ejemplo a la vez: simplemente guarde los primeros 10000 ejemplos para calcular una primera estimación de la media, stddev y PCA. Luego estimelo nuevamente cada 10000 para asegurarse de que sus primeras estimaciones sean lo suficientemente buenas. Alternativamente, puede utilizar la estimación corriente de la media y la varianza utilizando algoritmos como los descritos en [4] y [5]. Sin embargo, no conozco ninguna forma de tener un blanqueamiento continuo de los datos …

Si su algoritmo de aprendizaje es capaz de usar datos de segundo orden (por ejemplo, una estimación de la diagonal de la arpillera inversa) al realizar las actualizaciones, entonces los datos mal condicionados no son tan malos como con un simple descenso de gradiente estocástico (solo de primer orden), ver [5].

Sin embargo, una nota importante: si su entrada es muy escasa (muchos componentes son ceros), entonces desea aprovechar esta propiedad para la eficiencia (CPU y memoria) mediante el uso de una representación escasa. En ese caso, el ingenuo centrado a priori de los datos hará que no sea escaso y querrás evitarlo. En ese caso, el algoritmo de aprendizaje debe cambiarse para centrar / escalar los datos sobre la marcha solo para actualizaciones de coeficientes distintos de cero. En cuanto al blanqueamiento, no sé cómo se puede hacer de manera eficiente en ese caso: tal vez usando una implementación SVD dispersa (ver ¿Cuál es el mejor código SVD disperso paralelo disponible públicamente?), Pero eso podría romper la escasez de la entrada. Tal vez pueda cambiarlo con una reducción tenue. Me falta experiencia práctica en esto: te dejo experimentar e informar tus hallazgos aquí 🙂

[1] http://ttic.uchicago.edu/~shai/p…
[2] http://hunch.net/~jl/projects/in…
[3] http://yann.lecun.com/exdb/publi…
[4] http://www.johndcook.com/standar…
[5] http://en.wikipedia.org/wiki/Alg…
[6] http://leon.bottou.org/talks/lar…

* A2A *

Como ha mencionado Olivier Grisel, puede almacenar datos en un búfer hasta una cierta cantidad para calcular los parámetros de normalización necesarios.

Alternativamente, en caso de que no pueda permitirse almacenar datos en el búfer, le pediría que busque el aprendizaje en línea normalizado. Stephane Ross, Paul Mineiro y John Langford presentan un par de algoritmos de aprendizaje en línea que pueden funcionar con datos no normalizados y son invariables en la escala. Sus experimentos muestran que sus algoritmos funcionan cerca del algoritmo si funcionaba con datos pre-normalizados (con algunas advertencias, por supuesto, pero lo dejaré para que los explore).

Hay un tutorial de PowerPoint bastante fácil de entender para el aprendizaje en línea normalizado [1] y la implementación de este algoritmo está disponible en Vowpal Wabbit [2].

[1] Página en githubusercontent.com
[2] JohnLangford / votepal_wabbit

More Interesting

¿La programación de Python es suficiente para el aprendizaje automático o deberíamos aprender R también?

¿Cuál es un buen lugar para comenzar a trabajar en el uso del aprendizaje automático para el modelado de riesgo de crédito?

¿Cómo debe un principiante en Machine Learning enfocar una declaración de problema?

Cómo interpretar los resultados de un análisis de PCA

Cómo construir un motor de recomendación en tiempo real

¿Por qué estudiar el procesamiento del lenguaje natural?

¿Qué habilidades necesito para la IA?

¿Se puede desarrollar un bot de chat usando Tensorflow? En caso afirmativo, ¿cómo empiezo a codificar en el mismo?

¿Puede ocurrir un sobreajuste en un algoritmo de aprendizaje no supervisado?

¿Cómo superan los modelos de lenguaje neuronal (NLM) la maldición del problema de dimensionalidad para modelar el lenguaje natural?

¿Es mejor hacer una competencia de ciencia de datos en Kaggle o crear un algoritmo comercial en Quantopian para encontrar un trabajo en finanzas cuantitativas?

¿Cuál es la diferencia entre la red neuronal y la regresión logística?

¿Los métodos de aprendizaje automático son generales en comparación con los métodos de series temporales que se pueden llamar especializados?

¿El aprendizaje automático como campo todavía está en su infancia, o ya es sofisticado y está bien desarrollado?

¿Cuáles son algunos buenos proyectos de aprendizaje automático que implican el uso de estructuras de datos y tienen aplicaciones de la vida real y se pueden hacer en 2-3 semanas?