Je recherche une bibliothèque Python qui peut effectuer une régression segmentée (ou régression par morceaux) .
Exemple :
python
linear-regression
library
software-recommendation
Franck Dernoncourt
la source
la source
Réponses:
numpy.piecewise
peut le faire.Un exemple est donné sur SO ici . Pour être complet, voici un exemple:
la source
La méthode proposée par Vito MR Muggeo [1] est relativement simple et efficace. Il fonctionne pour un nombre spécifié de segments et pour une fonction continue. Les positions des points d'arrêt sont estimées de manière itérative en effectuant, pour chaque itération, une régression linéaire segmentée permettant des sauts aux points d'arrêt. A partir des valeurs des sauts, les positions de point d'arrêt suivantes sont déduites, jusqu'à ce qu'il n'y ait plus de discontinuité (sauts).
En particulier, la convergence ou le résultat peut dépendre de la première estimation des points d'arrêt.
Ceci est la méthode utilisée dans le R paquet segmenté .
Voici une implémentation en python:
Exemple:
[1]: Muggeo, VM (2003). Estimation des modèles de régression avec des points d'arrêt inconnus. Statistiques en médecine, 22 (19), 3055-3071.
la source
Je cherchais la même chose, et malheureusement il semble qu'il n'y en ait pas pour le moment. Vous trouverez quelques suggestions sur la façon de procéder dans cette question précédente .
Alternativement, vous pouvez examiner certaines bibliothèques R, par exemple segmentées, SiZer, strucchange, et si quelque chose fonctionne, essayez d'incorporer le code R en python avec rpy2 .
Modification pour ajouter un lien vers py-earth , «Une implémentation Python des splines de régression adaptative multivariée de Jerome Friedman».
la source
Il existe un article de blog avec une implémentation récursive de la régression par morceaux. Cette solution correspond à une régression discontinue.
Si vous n'êtes pas satisfait du modèle discontinu et que vous souhaitez un réglage continu, je vous propose de rechercher votre courbe dans une base de
k
courbes en L, en utilisant Lasso pour la rareté:Ce code vous renverra un vecteur de coefficients estimés:
En raison de l'approche Lasso, elle est clairsemée: le modèle a trouvé exactement un point de rupture parmi 10 possibles. Les nombres 0,57 et 0,825 correspondent à 0,5 et 1,25 dans le vrai DGP. Bien qu'elles ne soient pas très proches, les courbes ajustées sont:
Cette approche ne vous permet pas d'estimer exactement le point d'arrêt. Mais si votre jeu de données est suffisamment grand, vous pouvez jouer avec différents
k
(peut-être le régler par validation croisée) et estimer le point d'arrêt avec suffisamment de précision.la source