(Anos mais tarde) as funções lineares por partes são splines de grau 1, que podem ser solicitadas à maioria dos instaladores de spline.
scipy.interpolate.UnivariateSpline,
por exemplo, pode ser executado com k=1
um parâmetro de suavização s
, com o qual você terá que brincar - consulte
scipy-interpolation-with-univariate-splines .
No Matlab, veja
como escolher nós .
Adicionado: encontrar nós ótimos não é fácil, porque pode haver muitos ótimos locais. Em vez disso, você atribui ao UnivariateSpline um destino s
, soma do erro ^ 2, e permite que ele determine o número de nós. Após o ajuste, get_residual()
obterá a soma real do erro ^ 2 e get_knots()
os nós. Uma pequena mudança s
pode mudar bastante os nós, especialmente em ruídos altos - sim.
O gráfico mostra ajustes para uma função linear aleatória por partes + ruído para vários s
.
Para ajustar constantes por partes, consulte
Detecção de etapas . Isso pode ser usado para pw linear? Não sei; começar por diferenciar dados ruidosos aumentará o ruído errado.
Outras funções de teste e / ou links para documentos ou códigos seriam bem-vindos. Alguns links:
regressão linear por partes com nós como parâmetros
Splines lineares são muito sensíveis a onde os nós são colocados
seleção de nó para splines de regressão cúbica
Este é um problema complicado e a maioria das pessoas apenas seleciona os nós por tentativa e erro.
Uma abordagem que está crescendo em popularidade é usar splines de regressão penalizados.
Adicionado em março de 2014: a
programação dinâmica
é um método geral para problemas com subproblemas aninhados 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)
A programação dinâmica é muito inteligente, mas pode vencer a força bruta + heurística para esta tarefa?
Veja as excelentes notas de curso de Erik Demaine no
MIT 6.006. Introdução aos algoritmos e
também à regressão linear segmentada pelo Google e à
síndrome de John Henry.