Se existe uma maneira de identificar se dois conjuntos de pontos podem ser separados por uma linha?
Temos dois conjuntos de pontos e B se houver uma linha que separa A e B, de modo que todos os pontos de A e apenas A de um lado da linha e todos os pontos de B e apenas B do outro lado.
O algoritmo mais ingênuo que criei é a construção de polígonos convexos para e B e testá-los quanto à interseção. Parece que a complexidade do tempo para isso deve ser O ( n log h ) como para a construção de um polígono convexo. Na verdade, não estou esperando nenhuma melhoria na complexidade do tempo, não tenho certeza de que possa ser melhorada. Mas pelo menos deve haver uma maneira mais bonita de determinar se existe essa linha.
A propriedade dos seus dois conjuntos de dados é a da separabilidade linear , simplesmente, que existe uma linha que os separa. Muito aprendizado de máquina é dedicado a encontrar classificadores lineares , que são linhas que realizam a separação na qual você está interessado.
Enquanto você está falando de linhas, presumo que seus pontos estejam no avião. O que você deseja fazer é encontrar os valores , w 2 e w 3 , de modo que, para todos os pontos ( a 1 , a 2 ) no conjunto A , w 1 a 1 + w 2 a 2 ≥ w 3 e para todos os pontos ( b 1 , b 2 ) em B , w 1 b 1 +w1 w2 w3 (a1,a2) A w1a1+w2a2≥w3 (b1,b2) B . Assim, a desigualdade w 1 x + w 2 y ≥ w 3 pode ser visto como um classificador para o conjunto A .w1b1+w2b2<w3 w1x+w2y≥w3 A
Existem muitos algoritmos de aprendizado de máquina para determinar uma linha ideal (regressão linear, regressão logística etc.). Eles encontrarão valores para com base em alguma métrica de erro. Depois, você pode testar se todos os pontos estão classificados corretamente. Isto é, se todos os valores em A satisfazem a equação acima e similarmente para B .w1,w2,w3 A B
Como você só está interessado em saber se essa linha existe, é necessário usar técnicas existentes (embora isso provavelmente seja mais simples). Simplesmente configure a seguinte coleção de igualdades em termos de variáveis livres .w1,w2,w3
para cada i = 1 , . . , | Um | , onde A = { ( a 1 1 ,w1ai1+w2ai2≥w3 i=1,..,|A| .A={(a11,a12),…,(a|A|1,a|A|2)}
para cada j = 1 , . . , | B | , onde B = { ( b 1 1 ,w1bj1+w2bj2<w3 j=1,..,|B| .B={(b11,b12),…,(b|B|1,b|B|2)}
Se essas restrições forem consistentes, existe uma linha.
fonte
Se bem me lembro do suporte correto, as máquinas vetoriais constroem hiperplanos separados. Se você escolher a dimensão o hiperplano se tornará, obviamente, uma linha. Pode ser necessário verificar se há premissas adicionais a serem atendidas. Em duas dimensões, toda a abordagem pode simplificar consideravelmente, portanto o tempo de execução pode ser melhor do que na abordagem geral.2
fonte