(Años después) las funciones lineales por partes son splines de grado 1, que se les puede decir a la mayoría de los ajustadores de splines que hagan.
scipy.interpolate.UnivariateSpline,
por ejemplo, se puede ejecutar con k=1
un parámetro de suavizado s
, con el que tendrá que jugar: consulte
scipy-interpolation-with-univariate-splines .
En Matlab, vea
cómo elegir nudos .
Agregado: encontrar nudos óptimos no es fácil, porque puede haber muchos óptimos locales. En cambio, le das a UnivariateSpline un objetivo s
, suma de error ^ 2, y dejas que determine el número de nudos. Después del ajuste, get_residual()
obtendrá la suma real del error ^ 2 y get_knots()
los nudos. Un pequeño cambio s
puede cambiar mucho los nudos, especialmente en ruido alto - ymmv.
El gráfico muestra ajustes a una función aleatoria por partes lineal + ruido para varios s
.
Para ajustar constantes por partes, consulte
Detección de pasos . ¿Se puede usar para pw lineal? No se comenzar diferenciando datos ruidosos aumentará el ruido, incorrecto.
Serían bienvenidas otras funciones de prueba y / o enlaces a documentos o códigos. Un par de enlaces:
regresión lineal por partes con nudos como parámetros
Las splines lineales son muy sensibles al lugar donde se colocan los nudos
knot-selection-for-cubic-regression-splines
Este es un problema complicado y la mayoría de las personas simplemente seleccionan los nudos por prueba y error.
Un enfoque que está creciendo en popularidad es utilizar splines de regresión penalizadas.
Agregado en marzo de 2014:
la programación dinámica
es un método general para problemas con subproblemas anidados como este:
optimal k lines
= optimal k - 1 lines up to some x
+ cost of the last line x to the end
over x (all x in theory, nearby x in practice)
La programación dinámica es muy inteligente, pero ¿puede vencer a la fuerza bruta + heurística para esta tarea?
Vea las excelentes notas del curso de Erik Demaine en
MIT 6.006 Introducción a los algoritmos y
también la regresión lineal segmentada de Google y el
síndrome de John Henry.