Recientemente comencé a aprender a trabajar sklearn
y acabo de encontrar este resultado peculiar.
Utilicé el digits
conjunto de datos disponible sklearn
para probar diferentes modelos y métodos de estimación.
Cuando probé un modelo de máquina de vectores de soporte en los datos, descubrí que hay dos clases diferentes sklearn
para la clasificación SVM: SVC
y LinearSVC
, donde el primero usa el enfoque uno contra uno y el otro usa el enfoque uno contra el resto .
No sabía qué efecto podría tener en los resultados, así que probé ambos. Hice una estimación al estilo de Monte Carlo donde ejecuté ambos modelos 500 veces, cada vez dividiendo la muestra aleatoriamente en 60% de entrenamiento y 40% de prueba y calculando el error de la predicción en el conjunto de prueba.
El estimador SVC regular produjo el siguiente histograma de errores: mientras que el estimador SVC lineal produjo el siguiente histograma:
¿Qué podría explicar una diferencia tan marcada? ¿Por qué el modelo lineal tiene una precisión tan alta la mayor parte del tiempo?
Y, en relación, ¿qué podría estar causando la fuerte polarización en los resultados? O una precisión cercana a 1 o una precisión cercana a 0, nada intermedio.
A modo de comparación, una clasificación de árbol de decisión produjo una tasa de error mucho más distribuida normalmente con una precisión de alrededor de .85.
fuente
Similar to SVC with parameter kernel=’linear’, but implemented in terms of liblinear rather than libsvm, so it has more flexibility in the choice of penalties and loss functions and should scale better (to large numbers of samples).
Respuestas:
Un SVM normal con valores predeterminados utiliza una función de base radial como el núcleo SVM. Esto es básicamente un núcleo gaussiano, también conocido como curva de campana. Lo que significa que la tierra de nadie entre diferentes clases se crea con una función gaussiana. El SVM lineal utiliza un núcleo lineal para la función base, por lo que puede pensar en esto como una función en forma de ^. Es mucho menos sintonizable y es básicamente una interpolación lineal.
La gente está respondiendo esta pregunta porque no proporcionó mucha información, pero analizando profundamente lo que publicó ... esto golpea algunos aspectos fundamentales para comprender realmente los detalles del sesgo y la varianza y la diferencia entre lineal y no lineal funciones básicas en SVM.
Echa un vistazo a esta imagen que describe las cuatro regiones de sesgo alto y bajo y varianza alta y baja. Obviamente, el mejor lugar para estar es baja varianza y bajo sesgo.
Primero vamos a evaluar la varianza:
Ahora eche un vistazo a sus parcelas:
La función de base no lineal tiene mayor varianza. ¡Vea cómo es más ruidoso que el núcleo lineal! El núcleo lineal tiene menor varianza. ¡Mira cómo es menos ruidoso!
Ahora vamos a evaluar el sesgo:
¿Qué núcleo es más preciso? Podemos agregar los errores que nos proporcionó. El núcleo no lineal tiene un error total de ~ 550 + 325 = ~ 875. El núcleo lineal tiene un error de ~ 690 + ~ 50 = ~ 740. Entonces, el núcleo lineal parece tener un mejor desempeño general, pero en general están bastante cerca. ¡Esto es donde las cosas se ponen difíciles!
Poniendolo todo junto
Vea cómo el núcleo lineal hizo un mal trabajo en 1 y un gran trabajo en 0. Esto está bastante desequilibrado. Donde como el núcleo no lineal está más equilibrado. Parece que el punto óptimo podría ser crear un modelo equilibrado que no tenga una variación tan alta. ¿Cómo controlamos la alta varianza? Bingo - regularización. Podemos agregar regularización al modelo no lineal y probablemente veremos resultados mucho mejores. Este es el parámetro C en scikit learn SVM, que querrá aumentar desde el valor predeterminado. También podríamos jugar con el parámetro gamma. Gamma controla el ancho del gaussiano. Tal vez intente aumentarlo ligeramente para obtener resultados menos ruidosos, por ejemplo, una tierra de nadie más grande entre clases.
¡Espero que esto ayude!
fuente
Si utilizó el núcleo predeterminado en SVC (), el núcleo de la Función de base radial (rbf), entonces probablemente aprendió un límite de decisión más no lineal. En el caso del conjunto de datos de dígitos , esto superará ampliamente un límite de decisión lineal en esta tarea (ver 3.1 'Clasificador lineal de línea base')
fuente