Veri kümesinde zirveleri nasıl bulurum?


47

Aşağıdaki gibi bir grafik üreten bir veri kümem varsa, gösterilen tepelerin x değerlerini algoritmik olarak nasıl belirlerim (bu durumda üçü):

görüntü tanımını buraya girin


13
Altı yerel maxima görüyorum. Hangi üçe atıfta bulunuyorsunuz? :-). (Tabii ki, çok açık - benim laf itme daha kesin bir "zirve" define için teşvik etmektir, bu iyi bir algoritma yaratmanın anahtarı olduğu için.)
whuber

3
Veriler, bazı rasgele gürültü bileşenleri eklenmiş, tamamen periyodik bir zaman serisi ise, periyot ve genliğin, verilerden hesaplanan parametreler olduğu harmonik bir regresyon işlevine uyabilirsiniz. Sonuçta ortaya çıkan model, pürüzsüz olan (yani birkaç sinüs ve kosinüsün bir fonksiyonu) periyodik bir fonksiyon olacaktır ve bu nedenle, birinci türev sıfır ve ikinci türev negatif olduğunda, benzersiz bir şekilde tanımlanabilen zaman noktalarına sahip olacaktır. Bunlar tepeler olur. İlk türevin sıfır olduğu ve ikinci türevin pozitif olduğu yerler, çukur dediğimiz yer olacaktır.
Michael Chernick

2
Mode etiketini ekledim, bu sorulardan birkaçına göz atın, ilgilerini çekecek cevapları olacak.
Andy W

Cevaplarınız ve yorumlarınız için herkese teşekkürler, çok takdir! Önerilen algoritmaları verilerimle ilgili olarak anlamak ve uygulamak biraz zaman alacak, ancak daha sonra geri bildirimlerle güncelleyeceğimden emin olacağım.
nonaxiomatic

Belki de verilerim gerçekten gürültülü olduğu içindir, ancak aşağıdaki cevap ile başaramadım. Yine de, şu cevapta başarılı oldum: stackoverflow.com/a/16350373/84873
Daniel

Yanıtlar:


35

Genel bir yaklaşım, verileri yumuşatmak ve daha sonra yerel bir maksimum filtreyi yumuşakla karşılaştırarak zirveleri bulmaktır . İçinde R:

argmax <- function(x, y, w=1, ...) {
  require(zoo)
  n <- length(y)
  y.smooth <- loess(y ~ x, ...)$fitted
  y.max <- rollapply(zoo(y.smooth), 2*w+1, max, align="center")
  delta <- y.max - y.smooth[-c(1:w, n+1-1:w)]
  i.max <- which(delta <= 0) + w
  list(x=x[i.max], i=i.max, y.hat=y.smooth)
}

Geri dönüş değeri x, soruyu cevaplayan yerel maxima ( ) - argümanlarını ve bu yerel maksimaların gerçekleştiği x ve y dizilerine endeksleri içerir ( i).

Koşullara göre ayarlanması gereken iki parametre vardır: w yerel maksimum değeri hesaplamak için kullanılan pencerenin yarım genişliği. (Değeri, büyük ölçüde veri dizisinin uzunluğunun yarısından az olmalıdır.) Küçük değerler, küçük yerel tümsekleri toplar, oysa ki büyük değerler tam bunlardan geçer. Bir diğeri - bu kodda açık olmayan - pürüzsüz olanın spanargümanıdır loess. (Tipik olarak sıfır ile bir arasındadır; x değerinin bir oranı olarak pencere genişliğini yansıtır.) Daha büyük değerler, verileri daha agresif şekilde düzgünleştirir, yerel çarpmaların tamamen kaybolmasını sağlar.

Bu ayarı etkin görmek için, sonuçları çizmek için küçük bir test fonksiyonu oluşturalım:

test <- function(w, span) {
  peaks <- argmax(x, y, w=w, span=span)

  plot(x, y, cex=0.75, col="Gray", main=paste("w = ", w, ", span = ", span, sep=""))
  lines(x, peaks$y.hat,  lwd=2) #$
  y.min <- min(y)
  sapply(peaks$i, function(i) lines(c(x[i],x[i]), c(y.min, peaks$y.hat[i]),
         col="Red", lty=2))
  points(x[peaks$i], peaks$y.hat[peaks$i], col="Red", pch=19, cex=1.25)
}

İşte bazı sentetik, hafif gürültülü verilere uygulanan birkaç deney.

x <- 1:1000 / 100 - 5
y <- exp(abs(x)/20) * sin(2 * x + (x/5)^2) + cos(10*x) / 5 + rnorm(length(x), sd=0.05)
par(mfrow=c(3,1))
test(2, 0.05)
test(30, 0.05)
test(2, 0.2)

Arsalar

Ya geniş bir pencere (orta arsa) ya da daha agresif düz (alt arsa), üst arsada tespit edilen yerel maksimayı ortadan kaldırır. Buradaki en iyi kombinasyon muhtemelen geniş bir penceredir ve yalnızca yumuşak bir pürüzsüzleştirmedir, çünkü agresif pürüzsüzleştirme bu tepe noktalarını değiştiriyor gibi görünmektedir (alt kısımdaki orta ve sağ noktalara bakın ve konumlarını ham verilerin görünür tepe noktalarıyla karşılaştırın). Bu örnekte w=50ve span=0.05harika bir iş yapıyor (gösterilmiyor).

Uç noktaları yerel maksimumu vardır dikkat edin değil algıladı. Bunlar ayrı ayrı kontrol edilebilir. (Bunu desteklemek için argmax, düzleştirilmiş y-değerlerini döndürür.)


Bu yaklaşımın genel amaçlı çalışma için daha resmi modellemeye göre birçok avantajı vardır:

  • Öngörülen herhangi bir veri modelini benimsemez.

  • Veri özelliklerine uyarlanabilir.

  • İlgilenilen pik türlerini tespit etmek için uyarlanabilir.


3
Aksine, @Michael: Periyodiklik hakkında hiçbir şey kabul etmiyorum . Aslında, örnek periyodik görünüyor, ancak değil: ikinci dereceden bir terime dikkat edin. Harmonik regresyon bu örnekte başarısız olur (ve bu tür pek çok seriyle). Dahası, "görsel" bir şey seçmiyorum: hepsi algoritma ile yapılır. (Neden aslında bu cevabı okumadığınız güçlü bir izlenim alıyorum?)
whuber

1
Zirveleri algoritmik olarak birinci ve ikinci türev testleri ile bulabilirim, oysa diğer bazı araçları kullanmanız gerekir (belki de sayısal bir arama gibi). Amacım, bir yaklaşımın diğerinden daha iyi olduğunu iddia etmeye çalışmak değildi ya da cevabınızı hiç eleştirmiyordum. Çok fazla benzerlik ve birkaç farklılık görüyorum ve zirvelerinizi nasıl tanımladığınızı daha net anlamaya çalışıyordum.
Michael Chernick

3
O(n)

4
@Michael, bir cevabı / yorumu okumak için "vaktiniz" yoksa, gönderiyle ilgili cevap vermekten / iddiada bulunmaktan kaçınmayı düşünebilirsiniz. Bu tekrar tekrar yaptığınız bir şeydir ve çoğu zaman yapıcı olmayan değiş tokuşlara ve / veya daha sonra geri çekeceğiniz yanlış ifadelere neden olur. Vaktinizi boşa harcıyorsunuz ve bu tür konuşmalara katıldığınız diğerleri gibi görünüyor. Örneğin, bu yorum dizisinin tamamı kesinlikle başlamak için yanıtı okumaktan daha fazla zaman aldı. Neden bu şekilde siteyi kullanmayı seçtiniz beni bulmaya devam ediyor. Nasıl iyi biri olduğunu anlamıyorum.
Makro

2
İlginç yaklaşım için teşekkürler. Ben de Michael uzandığını noktası olsun düşünüyorum: Eğer en iyi değerleri karar grafikleri görüntülemek için gereken wve spanhem de daha yüksek değerler olduğunu keşfetmeye spanzirveleri kayması bulundu. Bu adımların bile otomatikleştirilebileceğini düşünüyor. Örneğin, ilk sayı için, keşfedilen zirvelerin kalitesini değerlendirebilirsek optimize, parametreleri çalıştırabiliriz ! İkinci sayı için, örneğin keşfedilen zirvenin her iki tarafını da seçin ve daha yüksek değerler arayın.
Darren Cook

1

Yorumda bahsettiğim gibi, zaman serileri periyodik olarak uyuyor gibi görünüyorsa, harmonik regresyon modeli birinci ve ikinci türev testlerini uygulayarak fonksiyonu düzeltmek ve tepe noktasını tanımlamak için bir yol sağlar. Huber, çoklu tepe noktaları olduğunda ve fonksiyonun mutlaka periyodik olmadığında avantajları olan parametrik olmayan bir test olduğuna işaret etti. Ama bedava yemek yok. Bahsedilen yönteminin avantajları olsa da, parametrik bir model uygunsa dezavantajları olabilir. Bu her zaman parametrik olmayan teknikleri kullanmanın ters yüzünü oluşturur. Parametrik varsayımlardan kaçınmasına rağmen, parametrik varsayımlar uygun olduğunda parametrik yaklaşım daha iyidir. Onun prosedürü ayrıca verilerdeki zaman serisi yapısından tam olarak yararlanamamaktadır.

Önerilen bir prosedürün avantajlarını belirtmek uygun olsa da, potansiyel dezavantajları belirtmenin de önemli olduğunu düşünüyorum. Hem benim yaklaşımım hem de Huber's, zirveleri verimli bir şekilde buluyor. Ancak, yerel azami, önceden belirlenen en yüksek zirveden daha düşük olduğunda, onun prosedürünün biraz daha fazla iş gerektirdiğini düşünüyorum.


2
Yaklaşımınızın "verimli şeklini" gösterebilir misiniz? Zorluğun bir kısmı, birden fazla tepe noktası bulmak için bir algoritma geliştirmektir - bu, sizin durumunuzda (pahalı bir şekilde hesaplanmış) bir türevinin tüm sıfırlarını bulmak , yalnızca bir sıfıra değil - ve bu kritik noktalardan hangisini sınıflandıracağınıza açık olmak demektir. "zirveler" olarak, hangileri değil. Ayrıca, “parametrik varsayımlar uygun olduğunda parametrik yaklaşım daha iyidir” iddiasıyla ilgili bazı desteklemeler veya büyütmeler iyi olacaktır, çünkü hepimizin bildiği gibi, parametrik varsayımlar hiçbir zaman tam olarak doğru değildir.
whuber

@whuber Modele bir dizi sinüs ve kosinüs toplamı olduğu için modele uyacağınızı söyledim, fonksiyon periyodiktir, çünkü hem ilk türev sıfır hem de sıfırdaki ikinci türev azalırken zirveler meydana gelir. İlk ve ikinci türev testlerini yaptığınızı söylediğimde kastettim. Şimdi tüm çözümleri bulmak için çözebilirsiniz, ancak bir zirveye sahipseniz diğerleri, çözümünüzden bir veya birkaç adım uzaktalar. Amacım, yöntemin herhangi bir üstünlüğünü iddia etmek değildir. Sadece bedava öğle yemeği olmadığını belirtmek istiyorum.
Michael Chernick 17:12

Parametrik olmayan yöntemler modelleme varsayımı gerektirmeme avantajına sahiptir, bu durumda periyodiklik varsayımı yoktur. Parametrik yaklaşımların, modelleme varsayımlarının tutulduğu zamanki parametrik olmayan yaklaşımlardan daha iyi olduğu konusundaki açıklamam size çok aşina olmalıdır. Asla tam olarak tutmayan parametrik varsayımlar hakkında tartışmaya ihtiyacım yok. Bu temelde aynı fikirdeyim. Ama ben Pitman verimliliği gibi bir şeyden bahsediyorum. Parametrik olmayan tahminler, model "doğru" olduğunda parametrik tahminler kadar verimli değildir.
Michael Chernick 17:12

Bu teoridir. Uygulamada parametrik modeller gerçeğe iyi yaklaşımlar olabilir. Bu durumda parametrik tahmin (mle) parametrik olmayan tahminden daha etkilidir. Ayrıca parametrik güven aralıkları daha iyi olacak çünkü daha sıkı olacaklar. Fakat çoğu zaman parametrik modelin sizin için ne kadar iyi olduğunu bilmiyorsunuz. Bu gibi durumlarda parametrik olmayan yaklaşımla muhafazakârlık (güvenli olmak) ya da cesur (ve muhtemelen yanlış olmak) arasında karar vermelisiniz.
Michael Chernick 17:12

1
Önermeye çalıştığım şey, Michael, bu durumda parametrik olmayan yaklaşımın, verinin özellikle modele yakın bir şekilde ayrılması haricinde herhangi bir parametrik yaklaşımdan çok daha iyi olması muhtemeldir - ve o zaman bile iyi performans gösterecektir. Periyodikliğin iyi bir örnek olduğunu varsayarsak: algoritmanız veri içindeki periyodiklikten ayrılanlarla aynı büyüklükte hatalar yapar. Bu tür hatalar yapma olasılığı, daha büyük asimptotik verimlilik ile sağlanan avantajları geçersiz kılar. İlk önce kapsamlı GoF testi yapmadan böyle bir prosedür kullanmak kötü bir fikirdir.
whuber

1

Sinyal işlemede klasik bir tepe algılama yaklaşımı aşağıdaki gibidir:

  1. Sinyali, örnekleme hızına ve sinyal özelliklerine bağlı olarak, örneğin ECG, 0,5-20Hz'de bir IIR bant geçiren filtre olarak, bir sıfır fazlı filtre, hiçbir faz kaymasının (ve ilişkili zaman gecikmesinin) uygulanmamasını sağlayacaktır
  2. Zirve vurgulamak için bir hilbert dönüşümü veya dalgacık yaklaşımı kullanılabilir.
  3. Statik veya dinamik bir eşik daha sonra uygulanabilir; burada eşiğin üzerindeki tüm numuneler tepe sayılır. Dinamik bir eşik durumunda, genellikle ortalamanın hareketli bir ortalama tahmininin üstünde veya altında bir standart N eşik sapması olarak tanımlanır .

İşe yarayan bir başka yaklaşım ise keskin bir şekilde yüksek geçirilmiş filtrelenmiş sinyali ağır bir şekilde düzeltti (alçak geçirgen veya medyan filtreli) ile karşılaştırmak ve 3. adımı uygulamaktır.

Bu yardımcı olur umarım.

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.