Estou procurando uma biblioteca Python que possa executar regressão segmentada (também conhecida como regressão por partes) .
Exemplo :
python
linear-regression
library
software-recommendation
Franck Dernoncourt
fonte
fonte
Respostas:
numpy.piecewise
posso fazer isso.Um exemplo é dado no SO aqui . Para completar, aqui está um exemplo:
fonte
O método proposto por Vito MR Muggeo [1] é relativamente simples e eficiente. Funciona para um número especificado de segmentos e para uma função contínua. As posições dos pontos de interrupção são estimadas iterativamente , executando, para cada iteração, uma regressão linear segmentada, permitindo saltos nos pontos de interrupção. Dos valores dos saltos, as próximas posições do ponto de interrupção são deduzidas, até que não haja mais descontinuidade (saltos).
Em particular, a convergência ou o resultado pode depender da primeira estimativa dos pontos de interrupção.
Este é o método utilizado no R pacote segmentado .
Aqui está uma implementação em python:
Exemplo:
[1]: Muggeo, VM (2003). Estimando modelos de regressão com pontos de interrupção desconhecidos. Estatísticas em medicina, 22 (19), 3055-3071.
fonte
Estive procurando a mesma coisa e, infelizmente, parece que não há uma no momento. Algumas sugestões de como proceder podem ser encontradas nesta pergunta anterior .
Como alternativa, você pode procurar em algumas bibliotecas R, por exemplo, segmentadas, SiZer, strucchange e, se algo funcionar, tente incorporar o código R em python com rpy2 .
Edição para adicionar um link ao py-earth , "Uma implementação em Python dos Splines de Regressão Adaptativa Multivariada de Jerome Friedman".
fonte
Há uma postagem no blog com uma implementação recursiva de regressão por partes. Essa solução se encaixa na regressão descontínua.
Se você está insatisfeito com o modelo descontínuo e deseja uma configuração contínua, proponho que você procure sua curva com base
k
em curvas em forma de L, usando Lasso para dispersão:Este código retornará um vetor de coeficientes estimados para você:
Devido à abordagem Lasso, é escasso: o modelo encontrou exatamente um ponto de interrupção entre 10 possíveis. Os números 0,57 e 0,825 correspondem a 0,5 e 1,25 no DGP verdadeiro. Embora não estejam muito próximas, as curvas ajustadas são:
Essa abordagem não permite estimar exatamente o ponto de interrupção. Mas se o seu conjunto de dados for grande o suficiente, você poderá jogar com diferentes
k
(talvez ajustá-lo por validação cruzada) e estimar o ponto de interrupção com precisão suficiente.fonte