La siguiente imagen muestra 7 puntos alrededor del origen. Uno de ellos ha sido seleccionado por un humano basado en reglas y experiencia y es de color rojo (el que está en el cuadrante inferior izquierdo).
Ahora tenemos más de 1000 de estos conjuntos de puntos y para cada conjunto, un humano ha seleccionado un solo punto. Estas condiciones se aplican a todos los conjuntos:
- Cada conjunto tiene alrededor de 3 a 10 puntos
- No hay valores atípicos
- Los puntos pueden tener valores positivos y negativos.
- No se cometieron errores al seleccionar un punto
Mi pregunta es: ¿Existe un algoritmo de aprendizaje automático para aprender de estos conjuntos y selecciones hechas por humanos para que pueda decidir automáticamente qué punto seleccionar cuando se da un nuevo conjunto de puntos? Este nuevo conjunto satisface las primeras 3 condiciones desde arriba, por supuesto.
2 observaciones finales:
- El ejemplo que di es solo un ejemplo construido al azar por mí para apoyar la idea sobre puntos en un plano alrededor del origen junto con uno seleccionado. En la vida real puede haber más estructura, pero por ahora tengo curiosidad y me gustaría saber qué es posible para este caso.
- ¿Serían posibles las variaciones? Digamos que se trata de 2 puntos seleccionados o tiene círculos con un radio dado en lugar de puntos.
machine-learning
Elmex80s
fuente
fuente
Respuestas:
Este es un problema fascinante! Dos cosas lo hacen especialmente desafiante:
age
yheight
(en centímetros). Cada muestra tiene una entrada para cada uno y, por supuesto,(age, height) = (22, 180)
no es lo mismo que(age, height) = (180, 22)
. Tampoco es cierto en su problema. Un conjunto de puntos tiene entre 3 y 10 puntos, y el orden en el que ingresamos los puntos no debería hacer una diferencia al comparar dos conjuntos de puntos.Permítanme describir un algoritmo que se ocupa de ambos desafíos. La precisión de la predicción no es muy buena; pero tal vez veas una forma de mejorarlo. Y al menos predice algo , ¿verdad?
1. Simulando muestras
Para poder probar el algoritmo, escribí funciones que generan muestras y etiquetas.
Generación de muestras: cada muestra contiene entre 3 y 10 puntos. El número de puntos es aleatorio, extraído de una distribución uniforme. Cada punto es de la forma
(x_coordinate, y_coordinate)
. Las coordenadas son nuevamente aleatorias, extraídas de una distribución normal.Generando etiquetas: como ejemplo de juguete, supongamos que la regla para elegir un punto es: Elija siempre el punto más cercano
(0, 0)
, donde 'más cercano' debe entenderse en términos de la norma euclidiana.Ahora podemos crear nuestros trenes y conjuntos de prueba:
2. Comparación de conjuntos de puntos a través de la distancia de Hausdorff
Abordemos el primer problema: ¿Cómo debemos comparar diferentes conjuntos de puntos? El número de puntos en los conjuntos de puntos es diferente. Recuerde también que el orden en el que escribimos los puntos no debería importar: la comparación con el conjunto de puntos
[(0,0), (1,1), (2,2)]
debería producir el mismo resultado que la comparación con el conjunto de puntos[(2,2), (0,0), (1,1)]
. Mi enfoque es comparar conjuntos de puntos a través de su distancia de Hausdorff :3. Prediciendo a través de k-vecinos más cercanos y promediando
Ahora tenemos una noción de distancia entre conjuntos de puntos. Esto hace posible utilizar la clasificación de vecinos k más cercanos: dado un conjunto de puntos de prueba, encontramos los
k
conjuntos de puntos en nuestra muestra de entrenamiento que tienen la menor distancia de Hausdorff en relación con el conjunto de puntos de prueba, y obtenemos sus etiquetas. Ahora viene el segundo problema: ¿cómo convertimos estask
etiquetas en una predicción para el conjunto de puntos de prueba? Tomé el enfoque más simple: promediar las etiquetas y predecir el punto en el conjunto de puntos de prueba más cercano al promedio.4. Prueba
Todo está en su lugar para probar el rendimiento de nuestro algoritmo.
Para la función de decisión dada
num_neighbors = 70
, obtenemos una precisión de predicción del 84%. Esto no es terriblemente bueno y, por supuesto, es específico de nuestra función de decisión, que parece bastante fácil de predecir.Para ver esto, defina una función de decisión diferente:
El uso de esta función
dec_fun = decision_function_maxaverage
reduce la precisión de predicción al 45%. Esto muestra lo importante que es pensar en las reglas de decisión que generan sus etiquetas. Si tiene una idea de por qué las personas eligen ciertos puntos, esto lo ayudará a encontrar el mejor algoritmo.Algunas formas de mejorar este algoritmo: (1) Use una función de distancia diferente en lugar de la distancia de Hausdorff, (2) use algo más sofisticado que los vecinos más cercanos k, (3) mejore cómo las etiquetas de entrenamiento seleccionadas se convierten en una predicción.
fuente
Aquí hay algunas maneras en que puede usar redes neuronales para resolver este problema:
Con una simple red neuronal Feedforward:
Con una red neuronal convolucional:
La CNN podría funcionar mejor ya que sus datos son inherentemente espaciales. Sin embargo, debe decidir qué hacer si se superponen dos o más puntos. La solución más simple es elegir una al azar, lo que podría estar bien dependiendo de su tarea específica.
Con una red neuronal recurrente:
¡Sí, es tan fácil como eso con los RNN! Manejan bien las entradas de longitud variable, pero aún carecen de las ventajas de las CNN para manejar datos espaciales.
Advertencias:
Si usa un FNN o un RNN, también está la cuestión de cómo ordenar sus datos de entrada. Si no hay un orden inherente en sus datos reales, entonces no queremos que nuestra red haga predicciones diferentes para los mismos datos codificados en diferentes órdenes. Una forma de manejar esto es con el aumento de datos : duplica cada ejemplo de entrenamiento varias veces con diferentes órdenes de entrada, de modo que con suerte tu red pueda aprender las simetrías apropiadas.
Si solo tiene tiempo para probar un enfoque, elegiría la CNN. Las CNN están diseñadas para funcionar bien con datos espaciales, y no hay ningún problema con los pedidos de entrada.
fuente
(0,0), (1,1), (2,2)
tendrá un efecto diferente que alimentarlo con un conjunto de puntos(1,1), (2,2), (0,0)
.