Computacionalmente, a maneira mais eficaz de decidir se dois conjuntos de pontos são separáveis linearmente é aplicando a programação linear . O GLTK é perfeito para esse propósito e praticamente todas as linguagens de alto nível oferecem uma interface para ele - R , Python, Octave, Julia, etc.
Com relação à resposta que sugere o uso de SVMs :
O uso de SVMs é uma solução subótima para verificar a separabilidade linear por dois motivos:
SVMs são classificadores de margem flexível. Isso significa que um SVM linear do kernel pode se contentar com um plano de separação que não está se separando perfeitamente, mesmo que seja realmente possível. Se você verificar a taxa de erro, ela não será 0 e concluirá falsamente que os dois conjuntos não são linearmente separáveis. Esse problema pode ser atenuado com a escolha de um coeficiente de custo C muito alto - mas isso tem um custo computacional muito alto.
SVMs são classificadores de margem máxima. Isso significa que o algoritmo tentará encontrar um plano de separação que esteja separando as duas classes enquanto tenta ficar longe das duas o máximo possível. Novamente, esse é um recurso que aumenta desnecessariamente o esforço computacional, pois calcula algo que não é relevante para responder à questão da separabilidade linear.
Digamos que você tenha um conjunto de pontos A e B:
Então você deve minimizar o 0 para as seguintes condições:
(O A abaixo é uma matriz, não o conjunto de pontos acima)
"Minimizar 0" efetivamente significa que você não precisa realmente otimizar uma função objetivo, porque isso não é necessário para descobrir se os conjuntos são linearmente separáveis.
No final ( ) está definindo o plano de separação.
Caso você esteja interessado em um exemplo de trabalho em R ou nos detalhes matemáticos, verifique isso .