Saya mencari pustaka Python yang dapat melakukan regresi tersegmentasi (alias regresi satu demi satu ) .
Contoh :
python
linear-regression
library
software-recommendation
Franck Dernoncourt
sumber
sumber
Jawaban:
numpy.piecewise
dapat melakukan ini.Contoh diberikan pada SO di sini . Untuk kelengkapan, berikut adalah contohnya:
sumber
Metode yang diusulkan oleh Vito MR Muggeo [1] relatif sederhana dan efisien. Ini berfungsi untuk sejumlah segmen tertentu, dan untuk fungsi kontinu. Posisi breakpoint diperkirakan secara iteratif dengan melakukan, untuk setiap iterasi, regresi linier tersegmentasi yang memungkinkan lompatan pada breakpoint. Dari nilai-nilai lompatan, posisi breakpoint berikutnya disimpulkan, sampai tidak ada lagi diskontinuitas (melompat).
Secara khusus, konvergensi atau hasilnya mungkin tergantung pada estimasi pertama breakpoints.
Ini adalah metode yang digunakan dalam paket R Segmented .
Berikut ini adalah implementasi dalam python:
Contoh:
[1]: Muggeo, VM (2003). Memperkirakan model regresi dengan breakpoint yang tidak diketahui. Statistik dalam kedokteran, 22 (19), 3055-3071.
sumber
Saya sudah mencari hal yang sama, dan sayangnya sepertinya tidak ada saat ini. Beberapa saran untuk bagaimana melanjutkan dapat ditemukan dalam pertanyaan sebelumnya .
Atau Anda bisa melihat ke beberapa pustaka R misalnya tersegmentasi, SiZer, strucchange, dan jika ada sesuatu yang berfungsi untuk Anda, cobalah menyematkan kode R dalam python dengan rpy2 .
Mengedit untuk menambahkan tautan ke py-earth , "Sebuah implementasi Python dari Multivariate Adaptive Regression Splines Jerome Friedman".
sumber
Ada posting blog dengan implementasi regresi piecewise yang rekursif. Solusi itu cocok dengan regresi terputus-putus.
Jika Anda tidak puas dengan model terputus-putus dan ingin pengaturan terus menerus, saya akan mengusulkan untuk mencari kurva Anda dalam basis
k
kurva berbentuk-L, menggunakan Lasso untuk sparsity:Kode ini akan mengembalikan vektor perkiraan koefisien kepada Anda:
Karena pendekatan Lasso, jarang: model menemukan tepat satu breakpoint di antara 10 kemungkinan. Angka 0,57 dan 0,825 sesuai dengan 0,5 dan 1,25 dalam DGP yang sebenarnya. Meskipun tidak terlalu dekat, kurva yang dipasang adalah:
Pendekatan ini tidak memungkinkan Anda memperkirakan breakpoint dengan tepat. Tetapi jika dataset Anda cukup besar, Anda bisa bermain dengan yang berbeda
k
(mungkin tune dengan cross-validation) dan perkirakan breakpoint dengan cukup tepat.sumber