¿Es posible hacer un clasificador lineal para estos datos?

En general, este tipo de problemas requieren que diseñes funciones. Actualmente, los datos definitivamente no son linealmente separables, porque como dijiste, no puedes dibujar una línea de todos modos para separar los puntos de datos negros de los marrones. Pero, como puede imaginar, si puede proyectar estos datos en un espacio dimensional superior, si estas dimensiones están bien diseñadas, es probable que se separen linealmente.

Por ejemplo, si tiene una característica que mide la distancia de cada punto de datos desde el origen, estos puntos se vuelven fácilmente separables, porque los puntos marrones están más alejados del origen que los negros.

Para problemas más difíciles, es posible que necesite construir muchas características para que el problema sea factible. Pero el problema con muchas características es que los cálculos se vuelven muy caros, tanto durante la construcción de estas características como en la manipulación de puntos de datos después de que se construyen las características. Un truco común para lidiar con eso es usar una función de kernel, que le permite manipular datos sin construir explícitamente las características. Lea más sobre esto aquí, método Kernel.

El conjunto de datos que se muestra aquí es una configuración clásica para el truco del kernel. La idea es proyectar los puntos en un espacio diferente donde sea posible separarlos por una línea recta (o hiperplano en dimensiones más altas). Entonces, por ejemplo, si imaginó el plano (en el que están los puntos) como una lámina elástica y presionó hacia abajo en el centro para crear una forma de cuenco, creando efectivamente un espacio tridimensional, podría encontrar un plano horizontal que separe el interior anillo del anillo exterior.

Esta publicación de blog habla en profundidad sobre The Kernel Trick y proporciona mucha más información que mi simple intuición anterior. La publicación también proporciona código descargable en scikit-learn (aunque no he intentado descargarlo yo mismo), pero con scikit-learn, esencialmente pasa la transformación apropiada como un parámetro de kernel con nombre a su clasificador (máquina de vectores de soporte). El parámetro del kernel es una función que básicamente es una transformación del espacio actual al nuevo espacio. Más información sobre el uso de los parámetros del kernel con SVM en scikit-learn aquí: 1.4. Soporte de máquinas de vectores.

Muy simple. Simplemente use valores absolutos de las características. Entonces será linealmente separable.

Este es el enfoque general a seguir si desea utilizar un clasificador lineal con dichos datos: transforme el espacio de características para que las clases sean linealmente separables. También puede usar productos de punto para calcular distancias por pares entre muestras, y usar estas diferencias en un clasificador svm. Esto se llama truco del núcleo.

Podría intentar encontrar el centro de los “círculos” y agregar la distancia desde el centro como una característica a los puntos de datos, lo que debería hacer que los puntos sean linealmente separables.

Aproximadamente este enfoque se detalla aquí: el truco del kernel

Utilice el clasificador lineal en las funciones cuadráticas: {[matemáticas] x_1 ^ 2, x_2 ^ 2, x_1x_2 [/ matemáticas]}

Incluso 2 características pueden hacer esto:

Sus datos son un poco diferentes de las dos imágenes anteriores, pero puede intentarlo.

Para mí, aunque “kernel with linear SVM” suena lineal, no es 100% lineal porque “kernel” no es un procesamiento lineal.

“Lineal puro” ([matemática] ax_1 + bx_2> \ delta [/ matemática]) no resolvería su problema, aparentemente.

No puede usar un clasificador lineal como está y esperar buenos resultados, pero puede lograr un rendimiento perfecto con un clasificador lineal en coordenadas polares

Por cierto, la eficiencia se relaciona con qué tan bien un algoritmo usa los recursos (complejidad computacional).

Simplemente cree una tercera dimensión cuyo valor sea la distancia entre el original y el punto de datos, luego el clasificador lineal aprenderá a distinguir las 2 etiquetas dada su distancia al original.

Por lo tanto, cuando intente proyectar el clasificador lineal (está en tercera dimensión), sería un círculo centrado alrededor del original.

Mirando su imagen de datos, puede usar un núcleo gaussiano para clasificar los datos con el truco del núcleo. Los clasificadores lineales SVM, pasivos agresivos, como Perceptron tienen un producto de puntos que puede reemplazar con una función de núcleo y puede guardar vectores de soporte o conjunto activo para determinar el clasificador de hipótesis en un espacio incrustado que podría ser incluso de dimensiones infinitas como con el núcleo RBF. Lo siento, no soy un experto en esto.

Sí, si primero transforma sus datos. Intente transformar cada punto a la distancia desde el origen, luego sus datos serán linealmente separables en una dimensión.

En un sentido más general, este enfoque se llama método Kernel. Ver: método Kernel – Wikipedia

La abstracción es la idea clave que estás buscando aquí. Como has demostrado, estás mostrando los datos en un plano 2D. Piensa en lo que sucede cuando agregas otra dimensión. En otras palabras, está viendo sus datos desde una perspectiva muy estrecha. Lo que puede hacer es aumentar la dimensionalidad de sus datos, es decir, agregar otra dimensión, luego sus datos se transformarán en ese nuevo espacio y podrían ser potencialmente separables mediante un clasificador lineal. Esta es realmente la intuición detrás del algoritmo svm y cómo funciona. Espero que ayude!

Respuesta corta si.

Fundamentalmente, si tiene una propiedad observada y que no está relacionada linealmente con otra propiedad xy desea utilizar un clasificador lineal, simplemente transforme el problema en phi (x), y espacio. Donde phi (x) está linealmente relacionado con y. phi (x) a veces se llama función del núcleo.

Por ejemplo, si sus ejemplos se distribuyeron de acuerdo con y = 3 * x ^ 2 + 7 y desea hacer un clasificador lineal para aprender este límite. Puede ver fácilmente phi (x) = x ^ 2 transformará el problema en un problema lineal en el espacio phi (x). El límite de decisión en este espacio es una línea recta, y = 3z + 7.

Siguiendo la misma idea haciendo x a dos dimensiones, puede ver fácilmente phi (x) = x1 ^ 2, x2 ^ 2 puede aprender un límite de decisión lineal en su problema.

Estos datos no son linealmente separables.
Dos conjuntos en el espacio vectorial son separables si y solo si sus cascos convexos no se cruzan.

Podría usar una transformación no lineal o un núcleo no lineal y luego usar un clasificador lineal, como lo señalaron otras respuestas.

La regresión logística en [matemáticas] (x ^ 2, y ^ 2) [/ matemáticas] los separará perfectamente.

Prueba las coordenadas polares con números complejos:

[matemáticas] z = x + i \ veces y [/ matemáticas]

[matemáticas] \ text {log_z} = \ log (z) [/ matemáticas]

[matemáticas] \ text {log_radius} = \ text {real} (\ text {log_z}) [/ math]

[matemáticas] \ text {orientación} = \ text {imag} (\ text {log_z}) [/ math]

Si. Si representa cada punto con su sistema de coordenadas polares – Wikipedia, entonces el punto en el círculo interno tendrá un radio más pequeño que los puntos en el círculo externo, por lo que puede separarlos usando un clasificador lineal.

Si está tratando de clasificar el círculo interno frente al círculo externo, entonces representar los datos en coordenadas polares debería ser el truco. Obviamente, el origen de las coordenadas polares va en el centro de los datos.

En este caso, puede transformar del sistema de coordenadas cartesianas a radial.

Si observa la distancia radial de cada punto desde el origen, aquí hay un separador lineal claro posible.

Incluso si sus puntos no pueden ser linealmente separables de una manera satisfactoria en este momento, imagine si transforma su espacio en uno donde traza la distancia al centro del espacio. ¡Entonces definitivamente sería linealmente separable porque los radios de los puntos en los dos conjuntos son diferentes! De hecho, esa es en realidad la propiedad intrínseca que los diferencia. A lo largo de las líneas de las otras respuestas, ¿puedo sugerir una transformación que tome (x, y) -> (x ^ 2, y ^ 2).

Para obtener más información, consulte la introducción de Caltech al aprendizaje automático. Lecciones 3 y 4.

¡Adiós! ¡Esta fue mi primera respuesta de Quora!

Mira los datos. Parecen elipses. Mira la ecuación para una elipse.

Elipse – Wikipedia

[matemáticas] \ left ({\ frac {x} {a}} \ right) ^ {2} + \ left ({\ frac {y} {b}} \ right) ^ {2} = 1 [/ math]

Para hacer algo que vaya a diferenciar puntos dentro y fuera de una elipse, deberá elegir entidades para su vector de entidades que puedan expresar esa forma. Si solo elige [matemática] x [/ matemática] y [matemática] y [/ matemática] para sus características, solo podrá dividir los datos con una línea recta, pero si elige utilizar [matemática] x ^ 2 [/ math] y [math] y ^ 2 [/ math] para tus funciones podrás dividir los datos con una elipse. En este caso, parece que los datos se centran incluso en el origen, por lo que no necesitará [matemática] x [/ matemática] e [matemática] y [/ matemática] en su vector de características.

Bueno, ciertamente puedes: cualquier línea sería un clasificador lineal.

Sería muy malo.

No, no existe un buen clasificador lineal para esos datos, no es separable linealmente. Al menos no en 2D. Puede hacerlo si puede asignarlo a un espacio dimensional más alto, pero eso depende de cómo lo asigne.