Creo que estás tratando de comenzar desde un mal final. Lo que uno debe saber sobre SVM para usarlo es que este algoritmo está encontrando un hiperplano en el hiperespacio de atributos que separa mejor a dos clases, donde lo mejor significa con el mayor margen entre clases (el conocimiento de cómo se hace es su enemigo aquí, porque difumina la imagen general), como lo ilustra una imagen famosa como esta:
Ahora, quedan algunos problemas.
En primer lugar, ¿qué hacer con esos desagradables valores atípicos que se encuentran descaradamente en un centro de nubes de puntos de una clase diferente?
Con este fin, permitimos que el optimizador deje ciertas muestras mal etiquetadas, pero castiga cada uno de estos ejemplos. Para evitar la optimización multiobjetivo, las penalizaciones por casos mal etiquetados se fusionan con el tamaño del margen con el uso del parámetro adicional C que controla el equilibrio entre esos objetivos.
Luego, a veces el problema no es lineal y no se puede encontrar un buen hiperplano. Aquí, presentamos el truco del kernel: solo proyectamos el espacio original no lineal a uno de dimensiones superiores con alguna transformación no lineal, por supuesto definida por un grupo de parámetros adicionales, esperando que en el espacio resultante el problema sea adecuado para un plano SVM:
Una vez más, con algunas matemáticas y podemos ver que todo este procedimiento de transformación puede ocultarse elegantemente modificando la función objetivo al reemplazar el producto de puntos de los objetos con la llamada función del núcleo.
Finalmente, todo esto funciona para 2 clases, y tienes 3; ¿Qué hacer con ello? Aquí creamos 3 clasificadores de 2 clases (sentado - sin sentarse, de pie - sin pie, caminando - sin caminar) y en la clasificación combinamos aquellos con votación.
Ok, entonces los problemas parecen resueltos, pero tenemos que seleccionar el núcleo (aquí consultamos con nuestra intuición y seleccionamos RBF) y ajustamos al menos algunos parámetros (núcleo C +). Y debemos tener una función objetivo segura para el sobreajuste, por ejemplo, aproximación de errores de validación cruzada. Así que dejamos la computadora trabajando en eso, vamos a tomar un café, volvemos y vemos que hay algunos parámetros óptimos. ¡Excelente! Ahora solo comenzamos la validación cruzada anidada para tener una aproximación de error y listo.
Este breve flujo de trabajo, por supuesto, está demasiado simplificado para ser completamente correcto, pero muestra las razones por las que creo que primero debería probar con un bosque aleatorio , que es casi independiente de los parámetros, multiclase de forma nativa, proporciona una estimación de error imparcial y funciona casi tan bien como SVMs bien ajustados .