मैं डेटासेट में चोटियाँ कैसे ढूँढूँ?


47

अगर मेरे पास एक डेटा सेट है जो निम्नलिखित के रूप में एक ग्राफ बनाता है, तो मैं दिखाए गए चोटियों के एक्स-मानों को कैसे निर्धारित करूंगा (इस मामले में उनमें से तीन):

यहाँ छवि विवरण दर्ज करें


13
मैं छह स्थानीय मैक्सिमा देखता हूं। आप किस तीन का जिक्र कर रहे हैं? :-)। (बेशक यह स्पष्ट है - मेरी टिप्पणी का जोर आपको "चोटी" को अधिक सटीक रूप से परिभाषित करने के लिए प्रोत्साहित करना है, क्योंकि यह एक अच्छा एल्गोरिथ्म बनाने की कुंजी है।)
व्ह्यूबर

3
यदि डेटा कुछ यादृच्छिक शोर घटक के साथ एक विशुद्ध आवधिक समय श्रृंखला है, तो आप एक हार्मोनिक प्रतिगमन फ़ंक्शन को फिट कर सकते हैं जहां अवधि और आयाम ऐसे पैरामीटर हैं जो डेटा से अनुमानित हैं। परिणामी मॉडल एक आवधिक कार्य होगा जो सुचारु है (यानी कुछ सीन्स और कॉज़नेस का एक फ़ंक्शन) और इसलिए इसमें विशिष्ट पहचान योग्य समय बिंदु होंगे जब पहला व्युत्पन्न शून्य होता है और दूसरा व्युत्पन्न ऋणात्मक होता है। उन चोटियों होगा। वे स्थान जहाँ पहला व्युत्पन्न शून्य है और दूसरा व्युत्पन्न सकारात्मक है, जिसे हम गर्त कहते हैं।
माइकल चेरिक

2
मैंने मोड टैग जोड़ा है, उन सवालों में से कुछ की जांच करें, उनके पास ब्याज के उत्तर होंगे।
एंडी डब्ल्यू

आपके उत्तर और टिप्पणियों के लिए सभी को धन्यवाद, यह बहुत सराहना करता है! सुझाए गए एल्गोरिदम को समझने और लागू करने में मुझे कुछ समय लगेगा क्योंकि यह मेरे डेटा से संबंधित है, लेकिन मैं सुनिश्चित करूंगा कि मैं बाद में प्रतिक्रिया के साथ अपडेट करूं।
नॉनएक्जोमैटिक

शायद यह इसलिए है क्योंकि मेरा डेटा वास्तव में शोर है, लेकिन मुझे नीचे दिए गए उत्तर के साथ कोई सफलता नहीं मिली। हालाँकि, मुझे इस उत्तर के साथ सफलता मिली: stackoverflow.com/a/16350373/84873
डैनियल

जवाबों:


35

एक सामान्य दृष्टिकोण डेटा को सुचारू करना है और फिर एक स्थानीय अधिकतम फ़िल्टर की तुलना चिकनी से करना है । इन 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)
}

इसके रिटर्न वैल्यू में स्थानीय मैक्सिमा ( x) के तर्क शामिल हैं - जो प्रश्न का उत्तर देता है - और x- और y- सरणियों में अनुक्रमणिकाएं जहां उन स्थानीय मैक्सिमा होती हैं ( i)।

परिस्थितियों को देखते हुए दो पैरामीटर हैं: w स्थानीय अधिकतम गणना करने के लिए उपयोग की जाने वाली खिड़की की आधी चौड़ाई है। (इसका मान डेटा की सरणी की लंबाई से आधे से भी कम होना चाहिए।) छोटे मान छोटे स्थानीय धक्कों को उठाएंगे जबकि बड़े मान उन पर सही पास करेंगे। एक और - इस कोड में स्पष्ट नहीं - चिकनी spanका तर्क loessहै। (यह आम तौर पर शून्य और एक के बीच होता है; यह एक्स मानों की श्रेणी के अनुपात के रूप में एक खिड़की की चौड़ाई को दर्शाता है।) बड़े मान डेटा को अधिक आक्रामक रूप से चिकना करेंगे, जिससे स्थानीय धक्कों को पूरी तरह से गायब हो जाएगा।

इस ट्यूनिंग को प्रभावी रूप से देखने के लिए, आइए परिणामों को प्लॉट करने के लिए थोड़ा टेस्ट फंक्शन बनाएं:

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

यहाँ कुछ सिंथेटिक, थोड़ा शोर डेटा पर कुछ प्रयोग लागू किए गए हैं।

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)

भूखंड

या तो एक विस्तृत खिड़की (मध्य भूखंड) या अधिक आक्रामक चिकनी (निचला भूखंड) शीर्ष भूखंड में स्थानीय मैक्सिमा का पता लगाता है। यहां सबसे अच्छा संयोजन एक विस्तृत खिड़की है और केवल कोमल चौरसाई है, क्योंकि आक्रामक चौरसाई इन चोटियों को स्थानांतरित करने के लिए प्रकट होती है (नीचे की साजिश में मध्य और दाएं बिंदु देखें और उनके स्थानों की तुलना कच्चे डेटा की स्पष्ट चोटियों से करें)। इस उदाहरण में, w=50और span=0.05एक बड़ा काम करता है (नहीं दिखाया गया है)।

ध्यान दें कि अंतिम बिंदु पर स्थानीय मैक्सीमा का पता नहीं लगाया जाता है। इनका अलग से निरीक्षण किया जा सकता है। (इसका समर्थन करने के लिए, argmaxस्मूथ वाई-वैल्यू वापस करता है।)


सामान्य कार्य के लिए अधिक औपचारिक मॉडलिंग पर इस दृष्टिकोण के कई फायदे हैं:

  • यह डेटा के किसी भी पूर्वनिर्मित मॉडल को नहीं अपनाता है।

  • यह डेटा विशेषताओं के लिए अनुकूलित किया जा सकता है।

  • यह चोटियों के प्रकार का पता लगाने के लिए अनुकूलित किया जा सकता है, जिसमें कोई दिलचस्पी है।


3
इसके विपरीत, @ मिचेल: मुझे लगता है कि आवधिकता के बारे में कुछ भी नहीं है। दरअसल, उदाहरण समय-समय पर दिखता है लेकिन यह नहीं है: द्विघात शब्द पर ध्यान दें। इस उदाहरण के साथ (और ऐसी कई अन्य श्रृंखलाओं के साथ) हार्मोनिक प्रतिगमन विफल हो जाएगा। इसके अलावा, मैं "नेत्रहीन" कुछ भी नहीं उठाता हूं: यह सब एल्गोरिथ्म के साथ किया जाता है। (मैं क्यों एक मजबूत धारणा है कि आप वास्तव में इस सवाल का जवाब नहीं पढ़ा है मिलता है?)
whuber

1
मैं पहले और दूसरे व्युत्पन्न परीक्षणों के माध्यम से एल्गोरिदम की चोटियों को पा सकता हूं, जबकि आपको कुछ अन्य साधनों (शायद संख्यात्मक खोज की तरह कुछ) का उपयोग करने की आवश्यकता है। मेरी बात यह नहीं थी कि एक दृष्टिकोण का दावा करने की कोशिश दूसरे से बेहतर थी और न ही मैं आपके उत्तर की आलोचना कर रहा था। मुझे बस बहुत सी समानताएं और कुछ अंतर दिखाई देते हैं और मैं इस बात को समझने की कोशिश कर रहा था कि आप अपनी चोटियों को कैसे पहचानते हैं।
माइकल चेरिक

3
@ मिचेल वे स्थान हैं जो एक चलती अधिकतम से अधिक नहीं हैं; यह उन्हें तेजी से और गणना करने में आसान बनाता है: कोई संख्यात्मक खोज नहीं है, बस एक साधारण स्कैन है। एक अलग-अलग चिकनी का उपयोग करने का लाभ यह है कि यह दिए गए एक्स-मानों के बीच चोटियों को प्रक्षेपित कर सकता है: यह मोटे या असमान एक्स-रिज़ॉल्यूशन के लिए उपयोगी है। O(n)
whuber

4
@ मिसेल, अगर आपके पास जवाब / टिप्पणी पढ़ने के लिए "समय" नहीं है, तो आप पोस्ट के बारे में प्रतिक्रिया देने / दावे करने से परहेज करने पर विचार कर सकते हैं। यह एक ऐसी चीज है जिसे आपने बार-बार किया है और यह अक्सर असंवैधानिक आदान-प्रदान की ओर जाता है और / या आप गलत बयान देते हैं जिसे आप बाद में वापस लेते हैं। ऐसा लगता है कि आपका समय बर्बाद हो रहा है और अन्य आप इस तरह की बातचीत में संलग्न हैं। उदाहरण के लिए, यह पूरी टिप्पणी धागा निश्चित रूप से शुरू करने के लिए जवाब पढ़ने से ज्यादा समय लेता है। आप इस तरह से साइट का उपयोग क्यों करते हैं, यह मेरी पहेली बनी हुई है। मैं यह नहीं देखता कि यह किसी को कैसे अच्छा करता है।
मैक्रों

2
दिलचस्प दृष्टिकोण के लिए धन्यवाद। मुझे लगता है कि मैं भी बिंदु माइकल के लिए तक पहुंच रहा था मिलती है: आपके लिए सबसे अच्छा मूल्यों तय करने के लिए चार्ट देखने के लिए की जरूरत है wऔर span, और भी है कि उच्च मूल्यों को खोजने के लिए spanचोटियों स्थानांतरण किया गया। ऐसा लगता है कि इन चरणों को भी स्वचालित किया जा सकता है। पहले अंक के लिए, अगर हम खोजे गए चोटियों की गुणवत्ता का मूल्यांकन कर सकते हैं, तो हम optimizeमापदंडों पर चल सकते हैं ! दूसरे अंक के लिए, उदाहरण के लिए खोजे गए शिखर के दोनों ओर एक खिड़की चुनें और उच्च मूल्यों की तलाश करें।
डैरेन कुक ने

1

जैसा कि मैंने टिप्पणी में उल्लेख किया है कि यदि समय श्रृंखला आवधिक फिटिंग के लिए प्रतीत होती है एक हार्मोनिक प्रतिगमन मॉडल फ़ंक्शन को सुचारू करने और पहले और दूसरे व्युत्पन्न परीक्षणों को लागू करके चोटी की पहचान करने का एक तरीका प्रदान करता है। ह्यूबर ने एक गैर-पैरामैट्रिक परीक्षण को इंगित किया है जिसमें कई चोटियां हैं और फ़ंक्शन आवधिक रूप से आवश्यक नहीं है। लेकिन मुफ्त लंच नहीं है। जबकि उसकी पद्धति के फायदे हैं कि वह उल्लेख करता है कि यदि पैरामीट्रिक मॉडल उपयुक्त है तो नुकसान हो सकता है। यह हमेशा गैर-तकनीकी तकनीकों का उपयोग करने के लिए फ्लिप पक्ष है। यद्यपि यह पैरामीट्रिक मान्यताओं से बचा जाता है, पैरामीट्रिक मान्यताओं के उपयुक्त होने पर पैरामीट्रिक दृष्टिकोण बेहतर होता है। उनकी प्रक्रिया भी डेटा में समय श्रृंखला संरचना का पूरा लाभ नहीं उठाती है।

मुझे लगता है कि जहां एक सुझाई गई प्रक्रिया के फायदों को इंगित करना उचित है, वहीं संभावित नुकसानों को इंगित करना भी महत्वपूर्ण है। मेरे दृष्टिकोण और ह्यूबर दोनों एक कुशल तरीके से चोटियों को ढूंढते हैं। हालाँकि मुझे लगता है कि उनकी प्रक्रिया थोड़ी अधिक काम करती है जब एक स्थानीय अधिकतम पहले से निर्धारित उच्चतम शिखर से कम होता है।


2
क्या आप अपने दृष्टिकोण के "कुशल तरीके" का प्रदर्शन कर सकते हैं? चुनौती का एक हिस्सा कई चोटियों को खोजने के लिए एक एल्गोरिथ्म को तैयार करना है - जो आपके मामले में इसका मतलब है कि एक (महंगे गणना वाले) व्युत्पन्न के सभी शून्य ढूंढना , न कि केवल एक शून्य - और इन महत्वपूर्ण बिंदुओं में से किसके बारे में आपको स्पष्ट करना होगा "चोटियों" के रूप में और जो नहीं हैं। इसके अलावा, आपके दावे के कुछ समर्थन या प्रवर्धन के लिए कि "पैरामीट्रिक दृष्टिकोण उचित है जब पैरामीट्रिक मान्यताओं उपयुक्त हैं" अच्छा होगा, जैसा कि हम सभी जानते हैं, पैरामीट्रिक धारणाएं कभी भी सही नहीं होती हैं।
whuber

@ जब मैंने कहा कि आप मॉडल को फिट करेंगे, क्योंकि चूंकि मोडल सीन्स का योग है और कोन्स का कार्य समय-समय पर होने वाला शिखर है, जब दोनों पहले व्युत्पन्न शून्य होते हैं और शून्य बिंदु पर दूसरा व्युत्पन्न घटते हैं। यही मेरा मतलब है जब मैंने कहा कि आप पहली और दूसरी व्युत्पन्न परीक्षा लेते हैं। अब आप सभी समाधानों को खोजने के लिए हल कर सकते हैं, लेकिन यदि आपके पास एक चोटी है, तो अन्य आपके द्वारा किए गए समाधान से एक अवधि और कई अवधि दूर हैं। मेरी बात विधि की किसी श्रेष्ठता का दावा करने की नहीं है। मैं केवल यह बताना चाहता हूं कि कोई मुफ्त भोजन नहीं है।
माइकल चेरिक

नॉनपामेट्रिक विधियों में मॉडलिंग धारणा की आवश्यकता नहीं होने का लाभ है, इस मामले में आवधिकता की कोई धारणा नहीं है। पैरामीट्रिक दृष्टिकोणों के बारे में मेरा बयान गैरपारंपरिक दृष्टिकोणों से बेहतर है जब मॉडलिंग की धारणाएं आपके लिए बहुत परिचित होनी चाहिए। मुझे पैरामीट्रिक मान्यताओं के बारे में बहस करने की ज़रूरत नहीं है जो कभी भी ठीक नहीं होती हैं। यह एक राय है कि मैं मूल रूप से सहमत हूं। लेकिन मैं पिटमैन की दक्षता के बारे में कुछ बात कर रहा हूं। मॉडल "सही" होने पर पैरामीट्रिक अनुमानों के अनुसार गैर-समरूप अनुमान उतना कुशल नहीं होते हैं।
माइकल चेरिक

वह सिद्धांत है। व्यवहार में पैरामीट्रिक मॉडल वास्तविकता का अच्छा अनुमान लगा सकते हैं। उस मामले में पैरामीट्रिक अनुमान (कहो mle) nonparametric अनुमान से अधिक कुशल है। इसके अलावा, पैरामीट्रिक आत्मविश्वास अंतराल बेहतर होगा क्योंकि वे तंग होंगे। लेकिन कई बार आप नहीं जानते कि पैरामीट्रिक मॉडल आपके उदाहरण के लिए कितना अच्छा है। इस तरह के मामलों में आपको पैरामीट्रिक दृष्टिकोण का उपयोग करके गैर-समरूप दृष्टिकोण के साथ रूढ़िवाद (सुरक्षित होने) और बोल्ड (और संभवतः गलत) होने के बीच फैसला करना होगा।
माइकल चेरिक

1
मैं क्या सुझाव देने के लिए कोशिश कर रहा हूँ, माइकल, कि इस मामले में nonparametric दृष्टिकोण होने की संभावना है है अब तक और फिर भी यह अच्छा प्रदर्शन करेंगे - को छोड़कर जब डेटा मॉडल के लिए विशेष रूप से बारीकी से तोड़ना किसी भी पैरामीट्रिक दृष्टिकोण की तुलना में बेहतर। आवधिकता को एक महान उदाहरण माना जाता है: आपका एल्गोरिथ्म डेटा के भीतर आवधिकता से प्रस्थान के रूप में परिमाण के उसी क्रम की त्रुटियां करेगा। इस तरह की गलतियाँ करने की संभावना अधिक से अधिक विषम दक्षता द्वारा प्रदत्त किसी भी लाभ को कम करती है। व्यापक GoF परीक्षण का संचालन किए बिना इस तरह की प्रक्रिया का उपयोग करना एक बुरा विचार होगा।
whuber

1

सिग्नल प्रोसेसिंग में एक क्लासिक चोटी का पता लगाने का तरीका इस प्रकार है:

  1. नमूना दर और सिग्नल गुणों के आधार पर सिग्नल को फ़िल्टर करें, उदाहरण के लिए ईसीजी के लिए, उदाहरण के लिए, ईसीआर बैंडपास फ़िल्टर @ 0.5-20Hz, एक शून्य-चरण फ़िल्टर यह सुनिश्चित करेगा कि कोई चरण शिफ्ट (और संबंधित समय अंतराल) पेश नहीं किया गया है
  2. एक हिल्बर्ट ट्रांसफ़ॉर्म या एक वेवलेट अप्रोच का उपयोग चोटियों पर ज़ोर देने के लिए किया जा सकता है
  3. एक स्थिर या गतिशील थ्रेशोल्ड तब लागू किया जा सकता है, जहां थ्रेशोल्ड के ऊपर के सभी नमूनों को चोटियां माना जाता है। डायनेमिक थ्रेशोल्ड के मामले में, इसे आमतौर पर औसत के अनुमानित औसत अनुमान से ऊपर या नीचे एक थ्रेशोल्ड एन मानक विचलन के रूप में परिभाषित किया जाता है।

एक और दृष्टिकोण जो काम करता है वह है एक बड़े पैमाने पर चिकनी (कम-पास या मध्य फ़िल्टर) के खिलाफ तेजी से फ़िल्टर किए गए सिग्नल की तुलना करना और चरण 3 लागू करना।

उम्मीद है की यह मदद करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.