में महत्वपूर्ण न्यूनतम और अधिकतमता की पहचान करें मुझे गणित के साथ समय श्रृंखला डेटा में स्थानीय न्यूनतम और अधिकतमता की पहचान करने की आवश्यकता है। ऐसा लगता है कि यह करना आसान काम होना चाहिए, लेकिन यह मुश्किल हो जाता है। मैंने इसे मैथफोरम पर पोस्ट किया, लेकिन सोचा कि मुझे यहां कुछ अतिरिक्त आंखें मिल सकती हैं।समय-श्रृंखला w/Mathematica
आप एक कागज है कि कम से समस्या पर चर्चा पा सकते हैं: http://www.cs.cmu.edu/~eugene/research/full/compress-series.pdf
मैं इस की कोशिश की है अब तक ...
जाओ और कुछ डाटा प्रारूप:
data = FinancialData["SPY", {"May 1, 2006", "Jan. 21, 2011"}][[All, 2]];
data = data/[email protected];
data = Transpose[{Range[[email protected]], data}];
2 कार्यों को परिभाषित करें:
पहली विधि:
findMinimaMaxima[data_, window_] := With[{k = window},
data[[k + [email protected][Partition[data[[All, 2]], 2 k + 1, 1], x_List /; x[[k + 1]] < Min[Delete[x, k + 1]] || x[[k + 1]] > Max[Delete[x, k + 1]]]]]]
अब एक और दृष्टिकोण है, हालांकि के रूप में लचीला नहीं: प्रत्येक कार्य करता है क्या पर
findMinimaMaxima2[data_] := data[[[email protected](Length[#] & /@ Split[Prepend[Sign[[email protected][[All, 2]] - [email protected][[All, 2]]], 0]])]]
देखो। सबसे पहले findMinimaMaxima2 []:
minmax = findMinimaMaxima2[data];
{[email protected], [email protected]}
[email protected]
इस बारे में 49% डेटा संपीड़न में सभी न्यूनतम और मॅक्सिमा और परिणाम (इस उदाहरण में) का चयन करता है, लेकिन यह खिड़की के विस्तार के लचीलेपन जरूरत नहीं है। यह अन्य विधि करता है।
minmax2 = findMinimaMaxima[data, 2];
{[email protected], [email protected]}
[email protected]
लेकिन क्या होता है जब हम 60 के लिए विंडो का विस्तार देखो: 2 के एक खिड़की, कम और यकीनन अधिक महत्वपूर्ण एक्सट्रीमा पैदावार
minmax2 = findMinimaMaxima[data, 60];
ListLinePlot[{data, minmax2}]
न्यूनतम और मॅक्सिमा अब वैकल्पिक में से कुछ। findMinimaMaxima की [] उत्पादन के लिए आवेदन findMinimaMaxima2 [] एक समाधान देता है ...
minmax3 = findMinimaMaxima2[minmax2];
ListLinePlot[{data, minmax2, minmax3}]
, लेकिन इस समस्या का समाधान करने के लिए एक अनाड़ी रास्ते की तरह लगता है।
तो, बाएं और दाएं को देखने के लिए एक निश्चित विंडो का उपयोग करने का विचार वह सब कुछ नहीं करता जो कोई चाहें। मैंने एक ऐसे विकल्प के बारे में सोचना शुरू किया जो एक श्रेणी मूल्य आर (उदाहरण के लिए एक प्रतिशत ऊपर या नीचे) का उपयोग कर सकता है कि फ़ंक्शन को अगले न्यूनतम या अधिकतमता को सेट करने के लिए मिलने या उससे अधिक की आवश्यकता होगी। यहाँ मेरी पहली कोशिश है:
findMinimaMaxima3[data_, R_] := Module[{d, n, positions},
d = data[[All, 2]];
n = Transpose[{data[[All, 1]], [email protected][If[(#2 <= #1 + #1*R && #2 >= #1) || (#2 >= #1 - #1* R && #2 <= #1), #1, #2] &, d[[1]], d]}];
n = Sign[[email protected][[All, 2]] - [email protected][[All, 2]]];
positions = [email protected][Most[Position[n, Except[0]]]];
data[[positions]]
]
minmax4 = findMinimaMaxima3[data, 0.1];
ListLinePlot[{data, minmax4}]
यह भी साथ पोस्ट प्रोसेसिंग से लाभ findMinimaMaxima2 []
ListLinePlot[{data, findMinimaMaxima2[minmax4]}]
लेकिन अगर तुम करीब से देखो, तो आप देखते हैं कि यह चरम याद करते हैं अगर वे में आर मूल्य से परे जाना कई पदों - चार्ट के पूर्ण न्यूनतम और अधिकतम के साथ-साथ बड़ी चाल के साथ-साथ ऊपर और नीचे भी शामिल हैं। आर मान बदलने से पता चलता है कि यह शीर्ष और बोतलों को और भी याद करता है:
minmax4 = findMinimaMaxima3[data, 0.15];
ListLinePlot[{data, minmax4}]
तो, मुझे पुनर्विचार करने की आवश्यकता है। कोई भी डेटा की साजिश देख सकता है और आसानी से महत्वपूर्ण न्यूनतम और अधिकतमता की पहचान कर सकता है। ऐसा करने के लिए एल्गोरिदम प्राप्त करना मुश्किल लगता है। एक खिड़की और/या आर मान समाधान के लिए महत्वपूर्ण प्रतीत होता है, लेकिन न तो अपने आप पर पर्याप्त लगता है (कम से कम ऊपर के दृष्टिकोण में नहीं)।
किसी को भी दृष्टिकोण से किसी से पता चला बढ़ाने या महत्वपूर्ण न्यूनतम और मॅक्सिमा की पहचान करने के लिए एक विकल्प का सुझाव कर सकते हैं?
इस कोड और उस में चर्चा के सभी के साथ एक नोटबुक अग्रेषित करने के लिए खुश। अगर किसी को इसकी ज़रूरत है तो मुझे बताएं।
धन्यवाद, Jagra
बारी मॅक्सिमा और न्यूनतम मापदंड हमेशा मूल्य में बदलाव में महत्वपूर्ण नहीं है। यहाँ http://i.imgur.com/nsIK7.png –
की तरह मुझे StackOverflow में आपका स्वागत है और तीन बातें याद दिलाना हम आम तौर पर यहाँ करने के लिए अनुमति दें: 1) आप मदद प्राप्त करते हैं, यह भी देने के लिए ** सवालों का जवाब दे कोशिश ** विशेषज्ञता के क्षेत्र में 2) ['एफएक्यू पढ़ें'] (http://tinyurl.com/2vycnvr) 3) जब आप अच्छे क्यू एंड ए देखते हैं, तो उन्हें 'ग्रे त्रिकोणों का उपयोग करके] वोट दें (http: // i .imgur.com/kygEP.png), क्योंकि सिस्टम की विश्वसनीयता उस प्रतिष्ठा पर आधारित है जो उपयोगकर्ता अपने ज्ञान को साझा करके हासिल करते हैं। यह भी जवाब स्वीकार करना याद रखें कि आपकी समस्या, अगर कोई है, ['चेकमार्क साइन दबाकर] बेहतर तरीके से हल करता है (http://i.imgur.com/uqJeW.png) –