Pensé que podría valer la pena poner todas las soluciones propuestas en contexto para ver cuándo una podría usar una sobre la otra.
El blog de atbrox (http://atbrox.com/2010/02/08/par…) al que señala Soren brinda detalles sobre la implementación de reducción de mapas, pero la versión de SVM implementada se puede cambiar en función de las propiedades deseadas de la solución :
1. Si el problema original es lo suficientemente fácil como para que los datos requeridos para entrenar el modelo puedan caber en una sola máquina, luego entrene usando una sola máquina (con, por ejemplo, LibSVM) pero clasifíquela usando múltiples máquinas (como Peter Skomoroch sugiere). Para verificar si su problema es “fácil”, observe el rendimiento de sus datos de prueba a medida que agrega datos de capacitación. Si prueba las mesetas de rendimiento antes de alcanzar la memoria máxima en una sola máquina, puede usar esta versión.
- ¿Cuáles son los pensamientos de Yoshua Bengio sobre los modelos gráficos probabilísticos?
- ¿Debo aprender Python o R para el aprendizaje automático si estoy cursando mi licenciatura en matemáticas e ingeniería informática? ¿Qué idioma se usa más en las industrias?
- ¿Debo saber Python y R para aprender Machine Learning?
- ¿Qué tecnologías existen actualmente para hacer matemáticas en grandes conjuntos de datos?
- ¿Cuáles son las implicaciones de privacidad del reconocimiento facial DeepFace de Facebook?
2. Comparado con LibSVM que resuelve el problema dual, Chu et al, 2006 (http://www.cs.stanford.edu/peopl…) resuelve la formulación SVM primaria directamente usando un método de segundo orden como el método de Newton. Esto proporciona una solución exacta que puede implementarse dentro de map-reduce y tiene todas las garantías siempre que converja su método newton. Para obtener detalles sobre la derivación, consulte el documento original de Chapelle 2006 (http://citeseerx.ist.psu.edu/vie…). Este algoritmo le permitirá usar el truco del núcleo (si necesita usarlo) como se describe en la sección 3. La única suposición que hace el algoritmo es que puede hacer una matriz inversa, una operación O (s ^ 3), donde s es el número de vectores de soporte. Para evaluar si esto es cierto para sus datos, intuitivamente, si los datos parecen separables, entonces el límite de decisión no debería ser demasiado complejo y la cantidad de vectores de soporte requeridos es pequeña y definitivamente no escala con los datos. Si este no es el caso, entonces debe recurrir a soluciones aproximadas.
3. La solución PSVM de Chang et al, 2007 (http://books.nips.cc/papers/file…) es una solución aproximada al objetivo SVM. No hay garantías asociadas con él. Pero Google tiene una versión implementada como Jonathan señaló: http://code.google.com/p/psvm/
Casos especiales:
4. Si le interesa tener una solución escasa para su SVM (es decir, la selección de características es importante), utilice la formulación del problema 6 en el siguiente documento (que Amund señaló):
http://jmlr.csail.mit.edu/papers…
El problema original es NP-hard pero resuelven una versión aproximada del objetivo.
5. Todas las soluciones anteriores suponen que el número de características dadas no es muy grande y el problema de tamaño se debe solo a la gran cantidad de muestras de datos. Si la cantidad de funciones también es realmente grande, también querrás dividirlas en funciones. Use la versión que propone el grupo de Boyd (como Matt mencionó):
http://www.stanford.edu/~boyd/pa…
Esto también es aproximado y no le brinda una forma de usar el truco del núcleo.
En resumen, para la mayoría de los problemas, diría que Chapelle / Chu sería su mejor opción. Me encantaría recibir comentarios si ves errores en mi resumen.