Prueba de separabilidad lineal

20

¿Hay alguna forma de probar la separabilidad lineal de un conjunto de datos de dos clases en altas dimensiones? Mis vectores de características son de 40 de largo.

Sé que siempre puedo ejecutar experimentos de regresión logística y determinar la tasa de aciertos frente a la tasa de falsas alarmas para concluir si las dos clases son linealmente separables o no, pero sería bueno saber si ya existe un procedimiento estándar para hacerlo.

Nik
fuente
2
eche un vistazo aquí:
user603
Es útil trazar la separabiidad: x = puntos mal clasificados normal-to-separating-plane, y = pérdida acumulada (x). (Para una parcela de muestra, intente una nueva pregunta con las etiquetas svm y visualización de datos.)
denis
¿Qué pasa con el problema de 3 clases? ¿Todos los problemas de las clases 3+ son no lineales?
Rosy

Respuestas:

3

Bueno, las máquinas de vectores de soporte (SVM) son probablemente lo que estás buscando. Por ejemplo, SVM con un núcleo RBF lineal, asigna la función a un espacio dimensional más alto e intenta separar las clases mediante un hiperplano lineal. Este es un buen video SVM corto que ilustra la idea.

Puede ajustar SVM con un método de búsqueda para la selección de características (modelo de contenedor) e intentar ver si alguna de sus características puede espaciar linealmente las clases que tiene.

Hay muchas herramientas interesantes para usar SVM, incluyendo LIBSVM , MSVMPack y Scikit -learn SVM .

soufanom
fuente
1
+1. Es casi como si Nik estuviera describiendo SVM, sin haber oído hablar de ellos. En R, puede usar el e1071paquete (misteriosamente nombrado) svmcon kernel="linear"y ver la predicción versus la real.
Wayne el
1
Sé sobre SVMs. Solo que no sabía que podía usarlos para probar la separabilidad lineal sin clasificar realmente cada muestra.
Nik
44
@Wayne: Nik en realidad no está pidiendo SVM. Explico en mi respuesta por qué esta no es la solución para su problema.
Raffael
2
No existe un " núcleo RBF lineal ".
Marc Claesen
Por supuesto ! Lo que se quiso decir es un kernel RBF que asigna datos en un espacio separable linealmente.
soufanom
17

Computacionalmente, la forma más efectiva de decidir si dos conjuntos de puntos son linealmente separables es mediante la aplicación de programación lineal . GLTK es perfecto para ese propósito y casi todos los lenguajes de alto nivel ofrecen una interfaz para él: R , Python, Octave, Julia, etc.

Con respecto a la respuesta que sugiere el uso de SVM :

El uso de SVM es una solución subóptima para verificar la separabilidad lineal por dos razones:

  1. Los SVM son clasificadores de margen blando. Eso significa que un núcleo lineal SVM podría conformarse con un plano de separación que no se separa perfectamente, aunque en realidad sea posible. Si luego verifica la tasa de error, no será 0 y concluirá falsamente que los dos conjuntos no son linealmente separables. Este problema puede atenuarse eligiendo un coeficiente de costo C muy alto, pero esto tiene un costo computacional muy alto.

  2. Los SVM son clasificadores de margen máximo. Eso significa que el algoritmo intentará encontrar un plano de separación que separe las dos clases mientras trata de mantenerse lo más lejos posible de ambas. Nuevamente, esta es una característica que aumenta el esfuerzo computacional innecesariamente, ya que calcula algo que no es relevante para responder la pregunta de la separabilidad lineal.


Digamos que tiene un conjunto de puntos A y B:

ingrese la descripción de la imagen aquí

Luego debe minimizar el 0 para las siguientes condiciones:

(La A a continuación es una matriz, no el conjunto de puntos desde arriba)

ingrese la descripción de la imagen aquí

"Minimizar 0" efectivamente significa que no necesita optimizar realmente una función objetivo porque esto no es necesario para averiguar si los conjuntos son linealmente separables.

Al final ( ingrese la descripción de la imagen aquí) está definiendo el plano de separación.


ingrese la descripción de la imagen aquí

En caso de que esté interesado en un ejemplo de trabajo en R o en los detalles matemáticos, consulte esto .

Raffael
fuente
3
Los SVM son clasificadores de margen suave ... excepto cuando usa SVM de margen duro. Dicho esto, usar SVM sería como disparar una mosca con un cañón.
Marc Claesen
eso es correcto, aunque muchas (o tal vez la mayoría) de las bibliotecas SVM no ofrecen esta opción
Raffael
2
do
0

Perceptron lineal está garantizado para encontrar una solución si existe. Este enfoque no es eficiente para grandes dimensiones. Computacionalmente, la forma más efectiva de decidir si dos conjuntos de puntos son linealmente separables es mediante la aplicación de programación lineal como lo menciona @Raffael.

Una solución rápida sería resolver un perceptrón. Un código con un ejemplo para resolver usando Perceptron en Matlab está aquí

Rishi Dua
fuente