(Bertahun-tahun kemudian) fungsi piecewise-linear adalah spline derajat 1, yang bisa dilakukan oleh sebagian besar spline tukang ojek.
scipy.interpolate.UnivariateSpline
misalnya dapat dijalankan dengan k=1
dan parameter smoothing s
, yang harus Anda mainkan - lihat
scipy-interpolasi-dengan-univariate-splines .
Di Matlab, lihat
cara memilih knot .
Ditambahkan: menemukan simpul yang optimal tidak mudah, karena mungkin ada banyak optima lokal. Sebagai gantinya, Anda memberi UnivariateSpline target s
, jumlah kesalahan ^ 2, dan membiarkannya menentukan jumlah simpul. Setelah pas, get_residual()
akan mendapatkan jumlah sebenarnya dari kesalahan ^ 2, dan get_knots()
simpulnya. Sebuah perubahan kecil di s
dapat banyak mengubah simpul, terutama dalam kebisingan tinggi - ymmv.
Plot menunjukkan cocok untuk fungsi piecewise-linear acak + noise untuk berbagai s
.
Untuk mendapatkan konstanta sambungan sedikit demi sedikit, lihat
Langkah deteksi . Bisakah itu digunakan untuk pw linear? Tidak tahu; memulai dengan membedakan data bising akan meningkatkan noise, salah.
Fungsi pengujian lainnya, dan / atau tautan ke makalah atau kode, akan diterima. Beberapa tautan:
piecewise-linear-regression-with-knots-as-parameter linier sangat sensitif terhadap tempat simpul ditempatkan sebagai simpul-pemilihan-untuk-kubik-regresi-splines Ini adalah masalah yang rumit dan kebanyakan orang hanya memilih simpul dengan coba-coba. Salah satu pendekatan yang semakin populer adalah menggunakan splines regresi yang dihukum.
Ditambahkan Maret 2014:
Pemrograman dinamis
adalah metode umum untuk masalah dengan subproblem bersarang seperti ini:
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)
Pemrograman dinamis sangat cerdas, tetapi bisakah ia mengalahkan brute force + heuristics untuk tugas ini?
Lihat catatan kursus yang sangat baik oleh Erik Demaine di bawah
MIT 6.006 Pengenalan algoritma dan regresi linier tersegmentasi
google
juga sindrom John Henry.