समय श्रृंखला डेटा चौरसाई


14

मैं एक एंड्रॉइड एप्लिकेशन का निर्माण कर रहा हूं जो नींद के दौरान एक्सेलेरोमीटर डेटा रिकॉर्ड करता है, ताकि नींद के रुझानों का विश्लेषण किया जा सके और उपयोगकर्ता को हल्की नींद के दौरान वांछित समय के पास जगाया जा सके।

मैंने पहले से ही डेटा और साथ ही अलार्म को इकट्ठा करने और संग्रहीत करने वाले घटक का निर्माण किया है। मुझे अभी भी नींद के डेटा को प्रदर्शित करने और सहेजने के जानवर से वास्तव में सार्थक और स्पष्ट तरीके से निपटने की आवश्यकता है, एक जो कि अधिमानतः विश्लेषण के लिए भी उधार देता है।

कुछ चित्रों में दो हज़ार शब्द कहते हैं: (मैं केवल एक लिंक को निम्न प्रतिनिधि के कारण पोस्ट कर सकता हूं)

यहां अनफ़िल्टर्ड डेटा, आंदोलन का योग, 30 सेकंड के अंतराल पर एकत्र किया गया है

और एक ही डेटा, चलती औसत चौरसाई के अपने स्वयं के अभिव्यक्तियों द्वारा चौरसाई

संपादित करें) दोनों चार्ट अंशांकन को दर्शाते हैं- एक न्यूनतम 'शोर' फिल्टर और अधिकतम कटऑफ फिल्टर है, साथ ही साथ एक अलार्म ट्रिगर स्तर (सफेद लाइन)

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

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

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

धन्यवाद!

जवाबों:


16

सबसे पहले, संपीड़न और विश्लेषण / प्रस्तुति के लिए आवश्यकताएं समान रूप से आवश्यक नहीं हैं - वास्तव में, विश्लेषण के लिए आप सभी कच्चे डेटा रखना चाहते हैं और इसमें विभिन्न तरीकों से स्लाइस और पासा करने की क्षमता हो सकती है। और जो आपके लिए सबसे अच्छा काम करता है, वह इस बात पर बहुत निर्भर करेगा कि आप उससे बाहर निकलना क्या चाहते हैं। लेकिन कई मानक चालें हैं जिन्हें आप आज़मा सकते हैं:

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

अंतिम आपके उद्देश्यों के लिए थोड़ा महंगा हो सकता है, लेकिन शायद "नींद लय" और इस तरह के रूप में आपको कुछ बहुत उपयोगी प्रस्तुति विकल्प देगा। (मुझे पता है कि एंड्रॉइड के बारे में कुछ नहीं पता है, लेकिन यह अनुमान है कि कुछ / कई / सभी हैंडसेट डीएसपी हार्डवेयर में निर्मित हो सकते हैं, जिनका आप लाभ उठा सकते हैं।)


* यह देखते हुए कि डिजिटल सिग्नल प्रोसेसिंग के लिए केंद्रीय कन्वेंशन कैसा है, ऑनलाइन एक सुलभ परिचय प्राप्त करना आश्चर्यजनक रूप से कठिन है। या कम से कम 3 मिनट की गुगली में। सुझावों का स्वागत है!


10

कई nonparametric चौरसाई एल्गोरिदम हैं जिनमें स्प्लिन और लोस शामिल हैं। लेकिन वे अचानक बदलाव को भी सुचारू कर देंगे। तो फिल्टर कम-पास करेंगे। मुझे लगता है कि आपको एक वेवलेट-आधारित चिकनी की आवश्यकता हो सकती है जो अचानक कूदता है लेकिन फिर भी शोर को सुचारू करता है।

की जाँच करें पर्सिवल और वाल्डेन (2000) और संबद्ध आर पैकेज । यद्यपि आप एक जावा समाधान चाहते हैं, आर पैकेज में एल्गोरिदम खुले-स्रोत हैं और आप उनका अनुवाद करने में सक्षम हो सकते हैं।


3

यह कुछ हद तक स्पर्शनीय है जो आप पूछ रहे हैं, लेकिन यह कलमन फ़िल्टर पर एक नज़र डालने के लायक हो सकता है।


1

Savitzky-Golay चौरसाई एक अच्छा जवाब हो सकता है। यह एक स्लाइडिंग टाइम विंडो (उस डेटा पर एक कनवल्शन) पर कम से कम चौराहों का एक अत्यंत कुशल कार्यान्वयन है जो निश्चित समय तक प्रत्येक समय विंडो में डेटा को गुणा करने के लिए नीचे आता है। आप मान, डेरिवेटिव, दूसरा डेरिवेटिव और उच्चतर फिट कर सकते हैं।

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

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

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