Tengo puntos de datos en un intervalo dado. Me gustaría encontrar una función lineal por partes que se aproximan a estos puntos con un número mínimo de puntos para que mi error de aproximación esté por debajo de una tolerancia .
La función es una función lineal por partes definida con puntos . Para , se vería como:
Error de aproximación:
Para resolver ese problema necesito encontrar, para un dado , una forma de obtener el conjunto óptimo de puntos . Puedo intentar minimizar mi error de aproximación con el descenso de gradiente, pero la función no es convexa, por lo que es posible que no converja al óptimo global.
Si resuelvo el paso anterior, simplemente puedo ejecutar el algoritmo desde y detenerme cuando mi error de aproximación caiga por debajo
Suena como un problema bastante común que quizás ya tiene una solución. ¿Conoce uno o puede proponer un enfoque para ese problema?
Yo abordaría el problema de la siguiente manera.
Tome el intervalo que contiene los tres primeros puntos. Calcule el coeficiente de correlación
.
- si
no es lo suficientemente bueno, tome solo los dos primeros puntos, márquelos como si estuvieran en el primer intervalo y pase a examinar los siguientes tres. - elif
es bastante bueno, agregue un cuarto punto y vuelva a calcular el coeficiente; continuar hasta
sigue siendo bueno;
Repita hasta dividir todos los puntos en intervalos contiguos con buena correlación.
Solo tiene que considerar qué hacer con los puntos en el borde de los intervalos:
- puede mantener los intervalos separados;
- o puede retomar el último punto en el cálculo de la correlación para el siguiente, superponiendo así los intervalos.
Esta es la forma que me parece obvia; tal vez alguien más sabio señalará cómo es ineficiente o falla en la entrada perversa.
Considere el espacio bidimensional de funciones lineales. Cada punto de entrada, con sus tolerancias, define una banda de líneas aceptables. Una intersección de tales bandas es un polígono convexo.
Por lo tanto, comenzando por la izquierda, acumule las restricciones hasta que este polígono desaparezca y luego retroceda en uno. Su primera línea está representada por un punto en cualquier parte de este polígono; también puede usar su centroide, o el promedio de sus esquinas.
Luego hazlo de nuevo, comenzando con el último punto "cubierto" por la primera línea. Su es, por supuesto, la intersección de las dos primeras líneas de solución.
Podría ser interesante ver si comenzar desde la derecha da un resultado diferente.
(Mi preferencia estética sería usar todas las subsecuencias máximas compatibles, pero no es mi pregunta).
Editar: Esta es la idea principal del siguiente documento y se discute aquí
No es simple porque la función lineal por partes depende de los puntos de ruptura de una manera no diferenciable (sin embargo, es continua). Y las cosas se ponen feas si varías el número de descansos.
Es mucho más sencillo calcular la mejor aproximación para roturas fijas . Por lo tanto, una heurística simple sería la siguiente:
Comience con la mejor aproximación lineal en decir (Eso es sólo dos descansos). Si el error es suficientemente pequeño, deténgase.
De lo contrario, agregue un descanso (por ejemplo, en el medio) y calcule la mejor aproximación . Si el error es suficientemente pequeño, deténgase.
De lo contrario, compare el error de en y . Elija el subintervalo con el mayor error, digamos y agregue una nueva ruptura en . Calcule la mejor aproximación . Si el error es suficientemente pequeño, deténgase.
De lo contrario, ... y así sucesivamente
No sé si converge al mínimo, pero una vez hice una función para "convertir" puntos GPS en una carretera.
Para ello tomé una región rectangular cuyo lado es el doble de la tolerancia acumulando puntos siempre que el rectángulo pudiera contenerlos a todos. En este punto comencé con otro rectángulo que contenía al menos el último punto del rectángulo anterior.
usuario856
usuario856
Eric Leibenguth
anton sherwood
LinAlg