Ich suche eine Python-Bibliothek, die segmentierte Regression (auch bekannt als stückweise Regression) durchführen kann .
Beispiel :
python
linear-regression
library
software-recommendation
Franck Dernoncourt
quelle
quelle
Antworten:
numpy.piecewise
kann dies tun.Ein Beispiel ist auf SO gegeben hier . Der Vollständigkeit halber hier ein Beispiel:
quelle
Die von Vito MR Muggeo [1] vorgeschlagene Methode ist relativ einfach und effizient. Es funktioniert für eine bestimmte Anzahl von Segmenten und für eine kontinuierliche Funktion. Die Positionen der Haltepunkte werden iterativ geschätzt, indem für jede Iteration eine segmentierte lineare Regression durchgeführt wird, die Sprünge an den Haltepunkten ermöglicht. Aus den Werten der Sprünge werden die nächsten Haltepunktpositionen abgeleitet, bis es keine Diskontinuität mehr gibt (Sprünge).
Insbesondere kann die Konvergenz oder das Ergebnis von der ersten Schätzung der Haltepunkte abhängen.
Dies ist die Methode, die im R Segmented-Paket verwendet wird .
Hier ist eine Implementierung in Python:
Beispiel:
[1]: Muggeo, VM (2003). Schätzung von Regressionsmodellen mit unbekannten Haltepunkten. Statistics in Medicine, 22 (19), 3055-3071.
quelle
Ich habe das Gleiche gesucht, und leider scheint es derzeit keine zu geben. Einige Vorschläge zur weiteren Vorgehensweise finden Sie in dieser vorherigen Frage .
Alternativ können Sie sich einige R-Bibliotheken ansehen, z. B. segmented, SiZer, strucchange, und wenn dort etwas für Sie funktioniert, versuchen Sie, den R-Code mit rpy2 in Python einzubetten .
Bearbeiten, um einen Link zu Py-Earth hinzuzufügen : "Eine Python-Implementierung von Jerome Friedmans multivariaten adaptiven Regressionssplines".
quelle
Es gibt einen Blog-Beitrag mit einer rekursiven Implementierung der stückweisen Regression. Diese Lösung passt zur diskontinuierlichen Regression.
Wenn Sie mit dem diskontinuierlichen Modell nicht zufrieden sind und eine kontinuierliche Einstellung wünschen, würde ich vorschlagen, Ihre Kurve auf der Grundlage von
k
L-förmigen Kurven zu suchen und Lasso für die Sparsamkeit zu verwenden:Dieser Code gibt einen Vektor mit geschätzten Koeffizienten an Sie zurück:
Aufgrund des Lasso-Ansatzes ist es spärlich: Das Modell hat genau einen Haltepunkt unter 10 möglichen gefunden. Die Zahlen 0,57 und 0,825 entsprechen 0,5 und 1,25 im wahren DGP. Obwohl sie nicht sehr eng sind, sind die angepassten Kurven:
Mit diesem Ansatz können Sie den Haltepunkt nicht genau schätzen. Wenn Ihr Datensatz jedoch groß genug ist, können Sie mit anderen
k
Daten spielen (möglicherweise durch Kreuzvalidierung optimieren) und den Haltepunkt genau genug schätzen.quelle