Entiendo los conceptos básicos de cuál es el objetivo de Support Vector Machines en términos de clasificar un conjunto de entrada en varias clases diferentes, pero lo que no entiendo son algunos de los detalles esenciales. Para empezar, estoy un poco confundido por el uso de Slack Variables. ¿Cuál es su propósito?
Estoy haciendo un problema de clasificación en el que capturé lecturas de presión de sensores que coloqué en la plantilla de un zapato. Un sujeto se sentará, se parará y caminará durante un par de minutos mientras se registran los datos de presión. Quiero entrenar a un clasificador para poder determinar si una persona está sentada, de pie o caminando y poder hacerlo para cualquier dato de prueba futuro. ¿Qué tipo de clasificador debo probar? ¿Cuál es la mejor manera de entrenar un clasificador a partir de los datos que he capturado? Tengo 1000 entradas para sentarme, estar de pie y caminar (3x1000 = 3000 en total), y todas tienen la siguiente forma de vector de características. (presión del sensor 1, presión del sensor 2, presión del sensor 3, presión del sensor 4)
fuente
Respuestas:
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 .
fuente