Làm cách nào để tìm các đỉnh trong tập dữ liệu?


47

Nếu tôi có một tập dữ liệu tạo ra một biểu đồ như sau, làm thế nào để tôi xác định một cách thuật toán các giá trị x của các đỉnh được hiển thị (trong trường hợp này là ba trong số chúng):

nhập mô tả hình ảnh ở đây


13
Tôi thấy sáu cực đại địa phương. Mà ba bạn đang đề cập đến? :-). (Tất nhiên đó là rõ ràng - lực đẩy của nhận xét của tôi là để khuyến khích bạn xác định một "đỉnh" một cách chính xác hơn, bởi vì đó là chìa khóa để tạo ra một thuật toán tốt.)
whuber

3
Nếu dữ liệu là một chuỗi thời gian hoàn toàn theo chu kỳ với một số thành phần nhiễu ngẫu nhiên được thêm vào, bạn có thể phù hợp với hàm hồi quy hài trong đó chu kỳ và biên độ là các tham số được ước tính từ dữ liệu. Mô hình kết quả sẽ là một hàm tuần hoàn trơn tru (nghĩa là hàm của một số sin và cosin) và do đó nó sẽ có các điểm thời gian xác định duy nhất khi đạo hàm thứ nhất bằng 0 và đạo hàm thứ hai là âm. Đó sẽ là những đỉnh cao. Những nơi mà đạo hàm thứ nhất bằng 0 và đạo hàm thứ hai là dương sẽ là cái mà chúng ta gọi là máng.
Michael Chernick

2
Tôi đã thêm thẻ chế độ, kiểm tra một vài trong số những câu hỏi đó, họ sẽ có câu trả lời quan tâm.
Andy W

Cảm ơn tất cả mọi người cho câu trả lời và ý kiến ​​của bạn, nó rất nhiều đánh giá cao! Tôi sẽ mất một chút thời gian để hiểu và thực hiện các thuật toán được đề xuất vì nó liên quan đến dữ liệu của tôi, nhưng tôi sẽ đảm bảo rằng tôi sẽ cập nhật sau với phản hồi.
nonaxiomatic

Có thể đó là vì dữ liệu của tôi thực sự ồn ào, nhưng tôi không có thành công với câu trả lời dưới đây. Mặc dù vậy, tôi đã thành công với câu trả lời này: stackoverflow.com/a/16350373/84873
Daniel

Câu trả lời:


35

Một cách tiếp cận chung là làm mịn dữ liệu và sau đó tìm các đỉnh bằng cách so sánh bộ lọc tối đa cục bộ với độ mịn . Trong 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)
}

Giá trị trả về của nó bao gồm các đối số của cực đại cục bộ ( x) - câu trả lời cho câu hỏi - và các chỉ mục vào các mảng x và y trong đó các cực đại cục bộ đó xảy ra ( i).

Có hai tham số được điều chỉnh theo các trường hợp: w là nửa chiều rộng của cửa sổ được sử dụng để tính toán tối đa cục bộ. (Giá trị của nó phải nhỏ hơn một nửa chiều dài của mảng dữ liệu.) Các giá trị nhỏ sẽ thu được các va chạm cục bộ nhỏ trong khi các giá trị lớn hơn sẽ vượt qua các giá trị đó. Một cái khác - không rõ ràng trong mã này - là spanđối số của loessmượt mà hơn. (Nó thường nằm giữa 0 và 1; nó phản ánh chiều rộng cửa sổ dưới dạng tỷ lệ của phạm vi giá trị x.) Các giá trị lớn hơn sẽ làm mịn dữ liệu mạnh hơn, làm cho các va chạm cục bộ biến mất hoàn toàn.

Để xem điều chỉnh này có hiệu lực, hãy tạo một hàm kiểm tra nhỏ để vẽ kết quả:

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)
}

Dưới đây là một vài thí nghiệm áp dụng cho một số dữ liệu tổng hợp, hơi ồn.

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)

Lô đất

Hoặc một cửa sổ rộng (âm mưu giữa) hoặc trơn tru hơn (âm mưu dưới cùng) loại bỏ cực đại cục bộ được phát hiện trong âm mưu trên cùng. Sự kết hợp tốt nhất ở đây có thể là một cửa sổ rộng và chỉ làm mịn nhẹ nhàng, bởi vì làm mịn tích cực xuất hiện để dịch chuyển các đỉnh này (xem điểm giữa và điểm phải trong ô dưới cùng và so sánh vị trí của chúng với các đỉnh rõ ràng của dữ liệu thô). Trong ví dụ này, w=50span=0.05làm một công việc tuyệt vời (không hiển thị).

Lưu ý cực đại cục bộ tại các điểm cuối không được phát hiện. Đây có thể được kiểm tra riêng. (Để hỗ trợ điều này, argmaxtrả về các giá trị y được làm mịn.)


Cách tiếp cận này có một số lợi thế so với mô hình chính thức hơn cho công việc có mục đích chung:

  • Nó không áp dụng bất kỳ mô hình định trước của dữ liệu.

  • Nó có thể được thích nghi với các đặc điểm dữ liệu.

  • Nó có thể được điều chỉnh để phát hiện các loại đỉnh mà người ta quan tâm.


3
Ngược lại, @Michael: Tôi không cho rằng về tính định kỳ. Thật vậy, ví dụ có vẻ định kỳ nhưng nó không phải là: chú ý thuật ngữ bậc hai. Hồi quy sóng hài sẽ thất bại với ví dụ này (và với nhiều chuỗi khác như vậy). Hơn nữa, tôi không chọn bất cứ thứ gì "trực quan": tất cả đều được thực hiện với thuật toán. (Tại sao tôi có ấn tượng mạnh mẽ rằng bạn chưa thực sự đọc câu trả lời này?)
whuber

1
Tôi có thể tìm thấy các đỉnh theo thuật toán thông qua các thử nghiệm đạo hàm thứ nhất và thứ hai trong khi bạn cần sử dụng một số phương tiện khác (có thể giống như tìm kiếm bằng số). Quan điểm của tôi là không cố gắng khẳng định một cách tiếp cận tốt hơn phương pháp khác và tôi cũng không chỉ trích câu trả lời của bạn. Tôi chỉ thấy rất nhiều điểm tương đồng và một vài điểm khác biệt và tôi đã cố gắng để hiểu rõ hơn về cách bạn xác định đỉnh của mình.
Michael Chernick

3
@Michael Các đỉnh là các vị trí không vượt quá mức tối đa di chuyển; điều này làm cho chúng nhanh và dễ tính toán: không có tìm kiếm bằng số, chỉ cần quét đơn giản . Ưu điểm của việc sử dụng độ mịn khác biệt là nó có thể nội suy các đỉnh giữa các giá trị x đã cho: điều này hữu ích cho độ phân giải x thô hoặc không đồng đều. O(n)
whuber

4
@Michael, nếu bạn không "có thời gian" để đọc câu trả lời / nhận xét thì bạn có thể cân nhắc kiềm chế phản hồi / đưa ra các xác nhận về bài đăng. Đây là điều bạn đã thực hiện nhiều lần và nó thường dẫn đến những trao đổi không có tính xây dựng và / hoặc bạn đưa ra những tuyên bố không chính xác mà sau đó bạn rút lại. Có vẻ như lãng phí thời gian của bạn và những người khác mà bạn tham gia vào các cuộc trò chuyện như vậy. Ví dụ, toàn bộ chủ đề bình luận này chắc chắn mất nhiều thời gian hơn là chỉ đọc câu trả lời để bắt đầu. Tại sao bạn chọn sử dụng trang web theo cách này tiếp tục đánh đố tôi. Tôi không thấy nó tốt như thế nào.
Macro

2
Cảm ơn cách tiếp cận thú vị. Tôi nghĩ rằng tôi cũng nhận được điểm mà Michael đang hướng tới: bạn cần xem các biểu đồ để quyết định các giá trị tốt nhất wspan, và cũng để khám phá ra rằng các giá trị cao hơn của spanviệc dịch chuyển các đỉnh. Nó cảm thấy như thậm chí các bước này có thể được tự động. Ví dụ, đối với vấn đề đầu tiên, nếu chúng ta có thể đánh giá chất lượng của các đỉnh được phát hiện, chúng ta có thể chạy optimizetrên các tham số! Đối với vấn đề thứ hai, ví dụ: chọn một cửa sổ ở hai bên của đỉnh được phát hiện và tìm kiếm các giá trị cao hơn.
Darren Cook

1

Như tôi đã đề cập trong nhận xét nếu chuỗi thời gian có vẻ phù hợp định kỳ, mô hình hồi quy hài hòa cung cấp một cách để làm mịn chức năng và xác định đỉnh bằng cách áp dụng các phép thử đạo hàm thứ nhất và thứ hai. Huber đã chỉ ra một bài kiểm tra không tham số có lợi thế khi có nhiều đỉnh và hàm không nhất thiết phải định kỳ. Nhưng không có bữa trưa miễn phí. Mặc dù có những ưu điểm đối với phương pháp của anh ta mà anh ta đề cập có thể có những nhược điểm nếu một mô hình tham số phù hợp. Đó luôn là mặt trái của việc sử dụng các kỹ thuật phi tham số. Mặc dù nó tránh được các giả định tham số, cách tiếp cận tham số sẽ tốt hơn khi các giả định tham số là phù hợp. Thủ tục của anh ta cũng không tận dụng hết cấu trúc chuỗi thời gian trong dữ liệu.

Tôi nghĩ rằng trong khi nó là phù hợp để chỉ ra những lợi thế của một thủ tục được đề xuất, nó cũng quan trọng để chỉ ra những nhược điểm tiềm năng. Cả cách tiếp cận của tôi và Huber đều tìm thấy các đỉnh một cách hiệu quả. Tuy nhiên, tôi nghĩ rằng thủ tục của anh ta sẽ tốn nhiều công sức hơn khi mức tối đa cục bộ thấp hơn mức cao nhất được xác định trước đó.


2
Bạn có thể vui lòng chứng minh "cách hiệu quả" của phương pháp của bạn? Một phần của thách thức là đưa ra một thuật toán để tìm ra nhiều đỉnh - trong trường hợp của bạn có nghĩa là tìm tất cả các số không của một đạo hàm (tính toán rộng rãi), không chỉ một số không - và rõ ràng về những điểm quan trọng nào bạn sẽ phân loại là "đỉnh" và cái nào không. Ngoài ra, một số hỗ trợ hoặc khuếch đại cho tuyên bố của bạn rằng "phương pháp tham số tốt hơn khi các giả định tham số phù hợp" sẽ tốt, vì như chúng ta đều biết, các giả định tham số không bao giờ chính xác.
whuber

@whuber Tôi đã nói rằng bạn sẽ phù hợp với mô hình sau đó vì modle là tổng của sin và cosin nên hàm định kỳ đạt cực đại khi cả đạo hàm thứ nhất đều bằng 0 và đạo hàm thứ hai tại điểm 0 đang giảm. Đó là những gì tôi muốn nói khi tôi nói rằng bạn làm bài kiểm tra phái sinh thứ nhất và thứ hai. Bây giờ bạn có thể giải quyết để tìm tất cả các giải pháp nhưng nếu bạn có một đỉnh thì các giải pháp khác là một khoảng thời gian và cách xa giải pháp bạn có. Quan điểm của tôi là không yêu cầu bất kỳ ưu thế của phương pháp. Tôi chỉ muốn chỉ ra rằng không có bữa trưa miễn phí.
Michael Chernick

Các phương pháp không tham số có ưu điểm là không yêu cầu giả định mô hình hóa, trong trường hợp này không có giả định về tính tuần hoàn. Tuyên bố của tôi về các cách tiếp cận tham số tốt hơn so với các cách tiếp cận không tham số khi các giả định mô hình hóa được giữ rất quen thuộc với bạn. Tôi không cần phải tranh luận về các giả định tham số không bao giờ giữ chính xác. Đó là một ý kiến ​​mà tôi về cơ bản đồng ý với. Nhưng tôi đang nói về một cái gì đó như hiệu quả của Pitman. Các ước tính phi tham số không hiệu quả như các ước tính tham số khi mô hình là "chính xác".
Michael Chernick

Đó là lý thuyết. Trong thực tế các mô hình tham số có thể là xấp xỉ tốt với thực tế. Trong trường hợp đó, ước tính tham số (nói mle) hiệu quả hơn so với ước tính không tham số. Ngoài ra, khoảng tin cậy tham số sẽ tốt hơn bởi vì chúng sẽ chặt chẽ hơn. Nhưng nhiều khi bạn không biết mô hình tham số tốt như thế nào cho ví dụ của bạn. Trong những trường hợp như vậy, bạn phải quyết định giữa chủ nghĩa bảo thủ (an toàn) với phương pháp không theo tỷ lệ hoặc được in đậm (và có thể sai) bằng cách sử dụng phương pháp tham số.
Michael Chernick

1
Những gì tôi đang cố gắng để gợi ý, Michael, đó là trong trường hợp này là cách tiếp cận phi tham có khả năng là xa tốt hơn so với bất kỳ phương pháp tham số trừ khi dữ liệu tách đặc biệt gần gũi với mô hình - và thậm chí sau đó nó sẽ thực hiện tốt. Giả sử tính tuần hoàn là một ví dụ tuyệt vời: thuật toán của bạn sẽ mắc các lỗi có cùng độ lớn với độ khởi hành từ tính tuần hoàn trong dữ liệu. Khả năng phạm sai lầm như vậy sẽ vô hiệu hóa bất kỳ lợi thế nào có được nhờ hiệu quả tiệm cận lớn hơn. Sử dụng một quy trình như vậy mà không tiến hành thử nghiệm GoF rộng rãi trước tiên sẽ là một ý tưởng tồi.
whuber

1

Một cách tiếp cận phát hiện đỉnh cổ điển trong xử lý tín hiệu như sau:

  1. Lọc tín hiệu đến một phạm vi hợp lý hợp lý, tùy thuộc vào tốc độ lấy mẫu và thuộc tính tín hiệu, ví dụ: đối với ECG, bộ lọc băng thông IIR @ 0,5-20Hz, bộ lọc không pha sẽ đảm bảo không có sự dịch pha (và độ trễ thời gian liên quan)
  2. Một biến đổi hilbert hoặc một cách tiếp cận wavelet sau đó có thể được sử dụng để nhấn mạnh các đỉnh
  3. Sau đó, một ngưỡng tĩnh hoặc động có thể được áp dụng, trong đó tất cả các mẫu trên ngưỡng được coi là các đỉnh. Trong trường hợp ngưỡng động, nó thường được định nghĩa là ngưỡng N độ lệch chuẩn trên hoặc dưới mức ước tính trung bình di động của giá trị trung bình.

Một cách tiếp cận khác có hiệu quả là so sánh tín hiệu được lọc đường cao mạnh so với tín hiệu được làm mịn mạnh (thông thấp hoặc lọc trung bình) và áp dụng bước 3.

Hi vọng điêu nay co ich.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.