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:
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.
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:
Luego debe minimizar el 0 para las siguientes condiciones:
(La A a continuación es una matriz, no el conjunto de puntos desde arriba)
"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 ( ) está definiendo el plano de separación.
En caso de que esté interesado en un ejemplo de trabajo en R o en los detalles matemáticos, consulte esto .