Minimizar el número de puntos en una aproximación lineal por partes

Tengo metro puntos de datos ( X i , y i ) en un intervalo dado. Me gustaría encontrar una función lineal por partes F ( X ) que se aproximan a estos metro puntos con un número mínimo de puntos norte para que mi error de aproximación esté por debajo de una tolerancia ϵ .

Mi metro puntos:puntos

La función F es una función lineal por partes definida con norte puntos ( X a i , y a i ) . Para norte = 4 , se vería como:

aproximación

Error de aproximación:

1 metro 1 i metro ( y i F ( X i ) ) 2 ϵ

Para resolver ese problema necesito encontrar, para un dado norte , una forma de obtener el conjunto óptimo de puntos ( X a i , y a i ) . 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 norte = 1 , 2 , 3 , . . . 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?

El algoritmo de Douglas-Peucker se puede usar para encontrar una aproximación tal que máximo i ( y i F ( X i ) ) ϵ en cambio.
Lidiar con i ( y i F ( X i ) ) 2 en cambio, podría considerar un gráfico completo en vértices { 1 , 2 , , metro } ; asignar cada borde ( i , j ) Un coste w i j = i < k < j ( y k F i j ( X k ) ) 2 , dónde F i j es la aproximación lineal entre ( X i , y i ) y ( X j , k j ) ; luego encuentre el camino más corto desde 1 a metro usando solo norte 1 bordes
@Raul, Gracias! Creo que el algoritmo de Douglas-Peucker podría ser una solución adecuada para mi problema. También me gusta mucho su enfoque basado en gráficos para el error cuadrático. Tenga en cuenta que en ambos enfoques un inconveniente es que el ( X a i , y a i ) se eligen entre los ( X i , y i ) , que podría no ser óptimo. También estoy pensando que podría usar la solución de Douglas-Peucker para inicializar un algoritmo de descenso de gradiente mucho más cerca del óptimo global...
Me parece que Douglas-Peucker, al ajustarse exactamente a ciertos puntos de entrada, no logra encontrar mejores soluciones que pierdan todos los puntos (como en la ilustración de OP).
esto se puede expresar como un problema de optimización de enteros mixtos, que se puede resolver para norte

Respuestas (4)

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 ( X a 2 , y a 2 ) 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í

¿Se puede extender este concepto a polinomios por partes de grado n con k derivadas continuas?

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:

  1. Comience con la mejor aproximación lineal F 0 en decir [ a , b ] (Eso es sólo dos descansos). Si el error es suficientemente pequeño, deténgase.

  2. De lo contrario, agregue un descanso C (por ejemplo, en el medio) y calcule la mejor aproximación F 1 . Si el error es suficientemente pequeño, deténgase.

  3. De lo contrario, compare el error de F 1 en [ a , C ] y [ C , b ] . Elija el subintervalo con el mayor error, digamos [ a , C ] y agregue una nueva ruptura en [ a , C ] . Calcule la mejor aproximación F 2 . Si el error es suficientemente pequeño, deténgase.

  4. 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.