En el aprendizaje automático, ¿cómo podemos determinar si un problema es lineal / no lineal?

Antes de ejecutar cualquier clasificador así, necesitamos entender qué es un problema de clasificación lineal. Mira los datos 2D a continuación. En los datos A, los puntos azules y verdes se pueden clasificar fácilmente dibujando una línea simple. La línea que se muestra es una de las muchas soluciones posibles y obtendrá la máxima precisión. Una advertencia es que, si la línea de separación se dibuja de forma incorrecta, incluso en un caso lineal simple podemos equivocarnos. Por lo tanto, la optimización adecuada de los parámetros para encontrar una línea / plano / hiperplano óptimos es muy importante. En los datos B no podemos dibujar una línea que pueda clasificar los puntos verdes y azules. Por lo tanto, los datos A representan un problema de clasificación lineal y los datos B representan un problema de clasificación no lineal.

(Fuente: Naive Bayes I de Sebastian Raschka)

La mayoría de los datos en el mundo real no son 2D y es difícil visualizar más que los datos 3D fácilmente. Entonces, uno debe comenzar a usar algunas técnicas de clasificación. La regla del pulgar es usar primero los métodos simples (de acuerdo con la navaja de Occam) para, por ejemplo, un clasificador de distancia mínima, árboles de decisión, bahías ingenuas, y puede ser SVM con núcleo lineal (si comprende SVM). Si sus resultados no son buenos, es posible que su problema no pueda resolverse mediante métodos de clasificación lineal y que tenga que pasar a clasificadores no lineales más complejos, como SVM con núcleos gaussianos, bosque aleatorio, perceptrón multicapa, etc. .

Una forma muy aproximada es comparar el número de dimensiones en sus datos y el número de puntos. Cuantas más dimensiones tenga o menos puntos, más probable será que sus datos sean linealmente separables.

Piense 1: en 2d es muy fácil separar linealmente 2 puntos, pero si tiene 20 millones de puntos se vuelve menos probable.

Piense 2: si fija el número de puntos, a medida que tenga más dimensiones, es más probable que tenga un conjunto de datos separable linealmente.

Pero, por supuesto, esto no le dirá si los datos son realmente linealmente separables o no, una buena manera de hacerlo es ejecutar un Perceptron (es muy rápido) y ver si puede llegar a 0 errores, entonces sus datos son linealmente separables . Pero a veces los datos son altamente lineales pero no 100% linealmente separables, ya que puede haber un poco de ruido o valores atípicos. Luego puede ejecutar Perceptron o Linear SVM y ver si tiene un gran éxito en ese caso, puede llamar a sus datos lineales.

A menos que comencemos a ver espacios de alta dimensión (> 3d), decidir si un problema es lineal es empírico:

  • Entrene SVM sin trucos del núcleo y vea cómo funcionan. Si funcionan de manera razonable (de acuerdo con sus métricas) no hay necesidad de probar métodos no lineales, ya que son computacionalmente más caros y más lentos para entrenar / probar

Esa es la primera pregunta que me llamó la atención cuando estaba estudiando SVM lineal y SVM no lineal . Entonces, el método más intuitivo y mejor para identificar si las muestras de datos son linealmente separables o no es trazar la muestra usando las bibliotecas matplotlib en python. Por supuesto, es muy difícil visualizar la muestra de datos si la dimensión del espacio de características es más de tres.

Entonces, una cosa que es factible hacer es que si la precisión de los clasificadores no lineales es mucho mejor que la de los clasificadores lineales, entonces podemos inferir que el conjunto de datos no es linealmente separable. De lo contrario, es al revés.

Una práctica es entrenar el clasificador perceptrón en el conjunto de datos y ver si proporciona una precisión del 100% o no. Esto funciona ya que el perceptrón es un método matemáticamente probado que puede dividir datos correctamente a menos que sea no lineal.