Parçalı doğrusal verileri sığdır


18

Parçalı doğrusal ancak gürültülü verilere uymanın sağlam bir yolu nedir?

Neredeyse doğrusal olan birkaç parçadan oluşan bir sinyali ölçüyorum. Geçişleri algılamak için verilere otomatik olarak birkaç satır sığdırmak istiyorum.

Veri seti birkaç bin noktadan oluşur, 1-10 segment ve segment sayısını biliyorum.

Bu otomatik olarak ne yapmak istediğime bir örnektir.

resim açıklamasını buraya girin


Kırılma noktalarının yerlerini ne kadar doğru bilmek istediğinizi, tahmininizin doğrusal bir segmentin en kısa uzunluğu için ne olduğunu ve tipik bir örnekte kaç örnek olduğunu bilmediğiniz sürece bu sorunun makul bir şekilde cevaplanabileceğini düşünmüyorum. geçiş bölgesi. Şeklinizdeki yatay eksen etiketleri örnek numaralarsa, - aralığındaki iki geçişle , görev düz çizgi segmentlerinin daha uzun sürdüğünden ( örnekleri). x [ 0 ]x[-5]x[0]
Dilip Sarwate

@DilipSarwate Soruyu gereksinimlerle güncelledim (
bxw xaxis tesla'daki

Yanıtlar:


12

Saf olarak iki yaklaşım denedim (sadece 3 segment kullanarak). Elbette daha meraklı yöntemler olurdu.

    RANSAC, sağlam bir montaj mekanizması olması gerekiyordu. Birkaç segmentten sonra algoritmayı durdurmak kolaydır. Ancak, en azından basit bir uygulama ile - uygulamanızda gerekli görüldüğü gibi - segmentler arasında sürekliliği zorlamak zor olabilir. Kavramın bir kanıtı olarak , Mathematica'nın hat algılama fonksiyonu olan bulunan RANSAC motorunu kullanabilmem için veri noktalarından bir görüntü oluşturdum .benmbirgeLbennes

resim açıklamasını buraya girin

    Genel amaçlı bir küçültücü kullanarak parçalı doğrusal model takın. Segmentlerin sürekliliğini zorlamak kolaydır. İlginçtir, artıklar ve diğer özellikler için testler, segment sayısını otomatik olarak belirlemek için yeterli bilgi sağlayabilir - yine de denemedim. Mathematica'da şöyle görünüyor:

resim açıklamasını buraya girin


Harika bir cevap gibi görünüyor. Katkınız için teşekkürler.
Jason R

7

x[n]

  • x[n]y[n]

    y[n]={1,Eğer |(x[n+1]-x[n])-(x[n]-x[n-1])|<ε,0,aksi takdirde.
    εx[n1],x[n],x[n+1](n1,x[n1])(n,x[n])(n,x[n])(n+1,x[n+1])
  • y[n]1011ε

  • y[n]x[3]x[88]x[94]x[120]x[129], ve bunun gibi. Kesiştikleri yeri bulmak için A'yı sağa ve B'yi sola doğru uzatın; kesiştikleri yeri bulmak için B'yi sağa ve C'yi sola doğru uzatın. Tebrikler, artık verileriniz için sürekli ve parçalı bir doğrusal modeliniz var.


Tamamen cevabımı çaldı! =)
Phonon

Fikri interresting ama ne yazık ki sinyal gürültü nedeniyle iyi sonuçlar alamıyorum.
2012'de P3trus

1
Büyüklüğü epsilon ile karşılaştırılan bu ifade aslında verinin ikinci türevine bir yaklaşımdır. Bunu, gürültüye çok fazla tepki vermeyen üçten fazla nokta kullanarak hesaplamanın başka yolları da vardır. Savitzky-Golay'a bak.
DarenW

4

(Yıllar sonra) parçalı doğrusal fonksiyonlar, çoğu spline tesisatçısının yapması söylenebilen 1. derece splinelardır. Örneğin scipy.interpolate.UnivariateSpline ile oynamak k=1 ve bir düzeltme parametresi ile çalışabilirsiniz s- bkz. scipy-interpolation-univariate-splines .
Matlab'da, nasıl seçileceğini öğrenin .

Eklendi: optimal düğüm bulmak kolay değil, çünkü birçok yerel optima olabilir. Bunun yerine, UnivariateSpline'a bir hedef s, hata ^ 2 toplamı verir ve düğüm sayısını belirlemesine izin verirsiniz . Taktıktan sonra get_residual(), hata ^ 2 ve get_knots()düğümlerin gerçek toplamını alırsınız . Küçük bir değişiklik s, özellikle yüksek gürültülü - ymmv'de düğümleri çok değiştirebilir.
Grafik, rastgele parçalı doğrusal fonksiyona + çeşitli parazitlere uyum gösterir s.

Parçalı sabitleri takmak için bkz. Adım algılama . Bu pw linear için kullanılabilir mi? Bilmiyorum; gürültülü verileri ayırarak başlamak gürültüyü artıracaktır, yanlış.

Diğer test fonksiyonları ve / veya bildiri veya kod bağlantıları memnuniyetle karşılanacaktır. Birkaç bağlantı:
parça olarak düğümler ile parçalı-doğrusal-regresyon
Doğrusal kamalar, düğümlerin kübik regresyon kamaları için düğüm seçimi yerleştirildiği yere çok duyarlıdır

Bu zor bir sorundur ve çoğu insan düğümleri deneme yanılma yoluyla seçer.
Popülerliği artan bir yaklaşım, bunun yerine cezalandırılmış regresyon spline'larını kullanmaktır.


Mart 2014 eklendi: Dinamik programlama , aşağıdaki gibi iç içe alt problemlerle ilgili genel bir yöntemdir:

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)

Dinamik programlama çok zekidir, ancak bu görev için kaba kuvvet + buluşsal yöntemi yenebilir mi?
Erik Demaine tarafından MIT 6.006 Algoritmalara giriş altında
google segmentli lineer regresyon ve
John Henry sendromu altında mükemmel ders notlarına bakın .


resim açıklamasını buraya girin


Sorun, en azından scipy ile düğümlerin konumlandırılmasıdır. scipy eşit aralıklı düğüm kullanır.
P3trus

@ P3trus, başlangıç ​​için evet, ama sonra hareket edebilirler - plana bakın. Her neyse, düğümleri değil, toplam hatayı hedefler.
denis

@ P3trus Kesme noktalarını tekrar tekrar otomatik olarak seçen çok değişkenli regresyon spline yöntemini kullanmayı denediniz mi? cs.rtu.lv/jekabsons/regression.html
Atul Ingle

@Atul Ingle, afaik kırılma noktası / düğüm seçimi, spline tesisatçısı ne olursa olsun aynı sorundur. R / regresyon insanlarından bunun için farklı algoritmalar biliyorsanız, lütfen bir bağlantı gönderebilir misiniz?
denis

R / Matlab'da uyarlanabilir regresyon spline'ları yapan paketler mi arıyorsunuz? Burada: cran.r-project.org/web/packages/earth/index.html cran.r-project.org/web/packages/mda/index.html ve ayrıca Matlab'daki ARESLab'ı zaten linkini gönderdiğim.
Atul Ingle

0

Türevi alın ve neredeyse sabit değere sahip alanları arayın. İdeal olarak bir miktar +/- eğim düzeyine sahip alanları aramak için algoritma oluşturmanız gerekir ve bu da bu bölüm için çizginin eğimini verecektir. Kesitsel sınıflandırmayı yapmadan önce kayar ortalama gibi bir miktar düzleştirme yapmak isteyebilirsiniz. Bir sonraki adım, o noktada önemsiz olması gereken y kavşağını elde etmek olacaktır.


türev gürültülü olabilir. Bunu tavsiye ederim sanmıyorum.
robert bristow-johnson

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.