17 votos

¿Es posible añadir datos de entrenamiento a los modelos existentes de SVM?

Estoy usando libsvm y noté que cada vez que llamo svmtrain(), crear un nuevo modelo y que parece ser no hay opción para poner datos en un modelo existente. ¿Esto es posible hacerlo sin embargo? ¿Simplemente no estoy viendo este aspecto en libsvm?

17voto

Rob Allen Puntos 486

Suena como que usted está buscando una "incremental" o "en línea" algoritmo de aprendizaje. Estos algoritmos permiten la actualización de un clasificador con nuevos ejemplos, sin reciclaje de la totalidad de la cosa desde el principio.

Definitivamente, es posible con máquinas de soporte vectorial, aunque creo que libSVM no es compatible actualmente. Valdría la pena echar un vistazo a varios otros paquetes que ofrecen, incluyendo

PS: @Bogdanovist: Hay una muy amplia literatura sobre este. kNN es, obviamente, y trivialmente incremental. Uno podría girar a (algunos de) los clasificadores bayesianos en incremental de los clasificadores mediante el almacenamiento de cuenta en lugar de las probabilidades. TRÉMULO, AQ* y algunos (pero no todos) de los* ID de la familia de árbol de decisión de los algoritmos también son incrementales, la parte superior de mi cabeza.

13voto

j_pie Puntos 21

La mayoría de los online/incremental SVM utilidades son lineales, kernels y supongo que no es tan difícil como lo es para los no-lineal de los núcleos.

Algunos de los notables en Línea/incremental SVM herramientas disponibles en la actualidad:
+ Leon Bottous del LaSVM: apoya lineal y no-lineal de los núcleos. El código de C++
+ Bordes del LaRank: apoya lineal y no-lineal de los núcleos. El código de C++. Parece que el enlace está roto, ahora :-(
+ Gert Cauwenberghs' código incremental y descendente: es compatible tanto lineal y no lineal de los núcleos. Código de Matlab .
+ Chris Diehl Incremental SVM Aprendizaje: admite lineal y no-lineal de los núcleos. Código de Matlab.
+ Alistair Shilton del SVMHeavy: Sólo Binario de clasificación y regresión. El código de C++
+ Francesco Parrella del OnlineSVR: Sólo Regresión. Matlab y C++.
+ Pegasos: lineales y no lineales. C y código de Matlab. Una interfaz java.
+ Langford del Vowpal Wabbit: No estoy seguro :-(
+ Koby Hacinamiento del MCSVM: lineal y no-lineal. Código de C

Obtener una lista actualizada se puede encontrar en mi Quora respuesta.

5voto

jpmuc Puntos 4817

Otra posibilidad es la alfa-siembra. Yo no soy consciente de si libSVM admite. La idea es dividir una enorme cantidad de datos de entrenamiento en trozos. Luego de entrenar un SVM en el primer fragmento. Como la resultante de soporte de vectores no son sino algunas de las muestras de los datos, se encarga de las y los utilizan para entrenar a su SVM con el siguiente fragmento. También, el uso que SVM para calcular una estimación inicial de los valores de alfa para la siguiente iteración (la siembra). Por lo tanto, el beneficio es doble: cada uno de los problemas es más pequeño y a través de smart inicialización convergen aún más rápido. De esta manera se simplifica un problema enorme en forma secuencial de la resolución de una serie de pasos más simples.

1voto

Chantz Large Puntos 11

Otra opción si usted está buscando una solución "incremental" puede encontrarse aquí...

Liblinear Incremental

Una extensión de LIBLINEAR que permite el aprendizaje incremental.

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