मैं किसी श्रृंखला में डेटा बिंदुओं की संख्या को कैसे कम करूं?


11

मैंने 10 साल से अधिक समय तक आँकड़ों का अध्ययन नहीं किया है (और फिर एक बुनियादी पाठ्यक्रम), इसलिए शायद मेरा सवाल समझना थोड़ा कठिन है।

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

अक्सर डेटा के हजारों बिंदु होते हैं, लेकिन मुझे केवल कुछ सैकड़ों की आवश्यकता हो सकती है। तो मेरा सवाल है: मैं डेटा बिंदुओं की संख्या को सही ढंग से कैसे कम कर सकता हूं?

प्रक्रिया क्या कहलाती है? (इसलिए मैं इसे गूगल कर सकता हूं) क्या कोई पसंदीदा एल्गोरिदम है (मैं इसे C # में लागू करूंगा)

आशा है आपको कुछ सुराग मिले। मेरी उचित शब्दावली की कमी के लिए क्षमा करें।


संपादित करें: अधिक विवरण यहां आता है:

मुझे जो कच्चा डेटा मिला है, वह हृदय गति का डेटा है, और अंतिम बीट के बाद से मिलीसेकंड की संख्या के रूप में। डेटा की साजिश रचने से पहले मैं पहले नमूने से मिलीसेकंड की संख्या और प्रत्येक डेटा बिंदु पर बीपीएम (बीट्स प्रति मिनट) की गणना करता हूं (60000 / timesincelastbeat)।

मैं डेटा की कल्पना करना चाहता हूं, यानी उसे लाइन ग्राफ में प्लॉट करना चाहिए। मैं ग्राफ़ में अंकों की संख्या को हजारों से घटाकर कुछ सैकड़ों करना चाहता हूं।

एक विकल्प यह होगा कि श्रृंखला में प्रत्येक सेकंड के लिए औसत बीपीएम की गणना की जाए, या शायद हर 5 सेकंड या तो। यह काफी आसान होता अगर मुझे पता होता कि मैं उनमें से प्रत्येक अवधि (5 सेकंड-सेकंड के अंतराल) के लिए कम से कम एक नमूना होता।


मैं यह भूल गया: x- अक्ष के साथ बिंदु अलग-अलग रिक्ति के साथ आते हैं।

मुझे यकीन नहीं है कि मैं समझता हूं। क्या आपके पास y- अक्ष नहीं है?

आह क्षमा करें। मैंने गलत किया। मैंने अब इसे ऊपर बदल दिया है।

मुझे भी लगता है कि आपको थोड़ी और जानकारी देने की जरूरत है। उदाहरण के लिए, मैं अभी भी ग्राफ की कल्पना नहीं कर सकता। आपका लक्ष्य क्या है?

ठीक है माफ़ कर दो। मैंने ऊपर कुछ और विवरण जोड़े हैं।

जवाबों:


10

आपको दो समस्याएं हैं: बहुत अधिक अंक और शेष बिंदुओं को कैसे चिकना करना है।

अपना नमूना पतला

यदि आपके पास वास्तविक समय में बहुत अधिक अवलोकन हैं, तो आप हमेशा अपने नमूने को पतला करने के लिए सरल यादृच्छिक नमूने का उपयोग कर सकते हैं । ध्यान दें, इसके लिए भी यह सही होगा, अंकों की संख्या बहुत बड़ी होगी।

मान लीजिए कि आपके पास N अंक हैं और आप केवल उनमें से n चाहते हैं। फिर असतत वर्दी यू (0, एन -1) वितरण से एन यादृच्छिक संख्या उत्पन्न करते हैं । ये आपके द्वारा उपयोग किए जाने वाले बिंदु होंगे।

यदि आप इसे क्रमिक रूप से करना चाहते हैं, अर्थात प्रत्येक बिंदु पर आप इसका उपयोग करने का निर्णय लेते हैं या नहीं, तो बस संभावना p के साथ एक बिंदु स्वीकार करें । इसलिए यदि आप p = 0.01 सेट करते हैं तो आप सौ में 1 अंक स्वीकार करेंगे (औसतन)।

यदि आपका डेटा असमान रूप से फैला हुआ है और आप केवल बिंदुओं के घने क्षेत्रों में जाना चाहते हैं, तो बस अपने थिनिंग फ़ंक्शन को थोड़ा अधिक परिष्कृत करें। उदाहरण के लिए, पी के बजाय , किस बारे में:

1-पीexp(-λटी)

जहाँ एक सकारात्मक संख्या है और अंतिम अवलोकन के बाद का समय है। यदि दो बिंदुओं के बीच का समय बड़ा है, यानी बड़ा , तो एक बिंदु को स्वीकार करने की संभावना एक होगी। इसके विपरीत, यदि दो बिंदु एक साथ पास हैं, तो एक बिंदु को स्वीकार करने की संभावना ।λटीटी1-पी

आपको और मानों के साथ प्रयोग करना होगा ।λपी

चौरसाई

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

इस तरह के सामान के लिए सी # लाइब्रेरी उपलब्ध होनी चाहिए ।

निष्कर्ष

पतली यदि आवश्यक हो, तो चिकनी।


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

उस स्थिति में, आपके द्वारा चुने गए बिंदुओं के एन इंडेक्स उत्पन्न करें, और उन इंडेक्स को संग्रहीत करें।
csgillespie

या नमूना लेने से पहले बीज को आरएनजी में स्टोर करें।
डिर्क एडल्डबुलेटेल

बीज के संबंध में डिर्क का समाधान शायद बेहतर विकल्प है।
csgillespie

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

9

खैर, मुझे लगता है कि आप जिस शब्द की तलाश कर रहे हैं वह "नमूना" है, लेकिन मुझे यकीन नहीं है कि आप ऐसा क्यों करना चाहते हैं। हजारों डेटा पॉइंट बहुत अधिक नहीं हैं। या क्या आप समान रूप से समान अंकों की एक छोटी संख्या की साजिश करना चाह रहे हैं? इसे आमतौर पर "बिनिंग" कहा जाता है।

क्या आपका लक्ष्य एक दृश्य उत्पन्न करना है? उस स्थिति में, आप कच्चे डेटा को रखना चाह सकते हैं, इसे स्कैटरग्राफ के रूप में प्लॉट कर सकते हैं, फिर कुछ प्रकार की केंद्रीय प्रवृत्ति (रिग्रेशन लाइन, स्पलाइन, जो भी हो) को ओवरले कर सकते हैं ताकि जो भी टेकहोम संदेश होना चाहिए।

या क्या आपका लक्ष्य किसी तरह से परिणामों को संक्षेप में प्रस्तुत करना है? उस स्थिति में, आप अपनी समस्या को और अधिक विस्तार से बताना चाह सकते हैं!


हां, विज़ुअलाइज़ेशन है जो मुझे चाहिए। मैंने प्रश्न में कुछ और जानकारी जोड़ी है।

एक स्मूथिंग लाइन के साथ कच्चे डेटा को प्लॉट करना।
JoFrhwld

एक सुचारू लाइन के साथ कच्चे डेटा की साजिश रचने --- आप एक अलग विज़ुअलाइज़ेशन के रूप में समय के साथ बीपीएम में बदलाव की साजिश भी कर सकते हैं।
जॉन

5

औसत गणना करने से डेटा बिंदुओं की संख्या को कम करने की तुलना में एक अलग डेटासेट होता है। यदि प्रति मिनट एक दिल की धड़कन दूसरे दिल की धड़कन की तुलना में बहुत तेज है तो आप अपनी स्मूथिंग प्रक्रिया के माध्यम से सिग्नल खो देंगे।

यदि आप 125-125-0-125-125 को 100 से अधिक कहानी के रूप में सारांशित करते हैं जो आपके द्वारा बताए गए आंकड़ों के अनुसार आपके चौरसाई के माध्यम से अलग है।

कभी-कभी दिल भी धड़कता है और मेरा मानना ​​है कि यह एक ऐसी घटना है, जो दिलचस्प है, लेकिन प्लॉटेड हार्ट रेट डेटा को देखना चाहता है।

इसलिए मैं प्रस्ताव करूंगा कि आप दो सूत्र के बीच की दूरी की गणना एक सूत्र की तरह करें d=sqrt((time1-time2)^2 + (bpm1-bpm2))

आपने अपने कार्यक्रम में न्यूनतम दूरी तय की। फिर आप अपने डेटा के माध्यम से पुनरावृत्ति करते हैं और प्रत्येक बिंदु के बाद आप निम्नलिखित सभी बिंदुओं को हटाते हैं, जिसके लिए d आपकी न्यूनतम दूरी से छोटा है।

जैसा कि समय और bpm की इकाई समान नहीं है, आप इस बारे में सोचना चाहते हैं कि आप इकाइयों को सार्थक रूप से स्केल करने का तरीका कैसे खोज सकते हैं। इस कार्य को करने के लिए आपको उन डॉक्टरों से बात करनी चाहिए जिन्हें अंत में आपके ग्राफ़ की व्याख्या करनी है और उनसे पूछना है कि वे कौन सी जानकारी को आवश्यक मानते हैं।


दिलचस्प पोस्टिंग। उस पर भी गौर करूंगा। शायद आप सही हैं।

2

यदि BPM कई नमूनों पर एक समान रहता है (या जिस तरह से आप के बारे में चिंतित नहीं हैं, उस तरीके से असीम रूप से बदल रहे हैं) तो आप अपने डेटा को एक महत्वपूर्ण अंक में विभाजित कर सकते हैं, जिसके बारे में आप वास्तव में परवाह करते हैं और फिर रन लंबाई एन्कोडिंग करते हैं।

उदाहरण के लिए, R में यह डेटा:

0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

इसका आउटपुट है

rle(data)
Run Length Encoding
  lengths: int [1:3] 10 15 15
  values : num [1:3] 0 1 2

1

आप पर्याप्त जानकारी प्रदान नहीं कर रहे हैं। आप डेटा बिंदुओं को कम क्यों करना चाहते हैं। कुछ हजार इन दिनों कुछ भी नहीं है।

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

यह वास्तव में एक कठिन सवाल है कि बिना कारण के आप डेटा से छुटकारा क्यों पा रहे हैं।


ठीक है माफ़ कर दो। मैंने ऊपर कुछ और विवरण जोड़े हैं।

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