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 …
- ¿Tener un conocimiento profundo del aprendizaje por refuerzo cambia su perspectiva hacia la vida? ¿Cómo?
- ¿Qué es una máquina de vectores de soporte?
- ¿Se está realizando una fuerte investigación en la intersección del aprendizaje automático y la neurociencia computacional?
- ¿Cuáles son las relaciones entre el aprendizaje de representación y los modelos generativos en el campo de aprendizaje profundo?
- ¿Cómo se aplica la inteligencia artificial a los problemas ambientales?
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…