एल्गोरिदम को मात्रात्मक रूप से मॉनिटर करने के लिए एल्गोरिदम


24

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


कुछ विचारों के लिए ( पदकों का अनुमान लगाने के संदर्भ में) देखे जा रहे हैं देखे गए आंकड़े ।stackexchange.com / q / 346 / 919 पर
whuber

3
यह सवाल है crossposted math.SE. पर
कार्डिनल

जवाबों:


16

P2 एल्गोरिथ्म एक अच्छा खोज है। यह quantile के कई अनुमान लगाते हैं, उन्हें समय-समय पर अद्यतन करने, और का उपयोग करके काम करता है द्विघात quantile अनुमान लगाने के लिए (रेखीय नहीं, घन नहीं) प्रक्षेप। लेखकों का दावा है कि द्विघात प्रक्षेप से बेहतर ढंग से काम करता है।

आप बिल्कुल नहीं बताते हैं कि यह दृष्टिकोण आपके "भारी-पूंछ वाले" डेटा के लिए कैसे विफल हो जाता है, लेकिन यह अनुमान लगाना आसान है: भारी-पूंछ वाले वितरण के लिए चरम मात्राओं का अनुमान तब तक अस्थिर रहेगा जब तक बड़ी मात्रा में डेटा एकत्र नहीं किया जाता है। लेकिन यह एक समस्या है (कुछ हद तक) भले ही आप सभी डेटा को स्टोर करने जा रहे हों, इसलिए चमत्कार की उम्मीद न करें!

किसी भी दर पर, सहायक मार्कर सेट क्यों नहीं किए जाते हैं - आइए उन्हें और --within पर कॉल करें जो आप निश्चित हैं कि क्वांटाइल झूठ होगा, और और बीच सभी डेटा को संग्रहीत ? जब आपका बफ़र भर जाता है तो आपको इन मार्करों को अपडेट करना होगा, हमेशा रखते हुए । ऐसा करने के लिए एक सरल एल्गोरिथ्म (a) के वर्तमान पी 2 अनुमान और (b) से कम डेटा की संख्या और से अधिक डेटा की संख्या के से । इस फैशन में, आप उच्च निश्चितता के साथ, मात्रात्मक अनुमान लगा सकते हैं और साथ ही साथ यदि आपके पास संपूर्ण डेटासेट हमेशा उपलब्ध था, लेकिन आपको केवल एक अपेक्षाकृत छोटे बफर की आवश्यकता है।एक्स 6 एक्स 0 एक्स 6 एक्स 0एक्स 6 एक्स 0 एक्स 6x0x6x0x6x0x6x0x6

विशेष रूप से, मैं डेटा मान अनुक्रम के बारे में आंशिक जानकारी बनाए रखने के लिए एक डेटा संरचना का प्रस्ताव कर रहा हूं । यहाँ, एक लिंक की गई सूची हैn x 1 , x 2 , , x n y(k,y,n)nx1,x2,,xny

y=(x[k+1](n)x[k+2](n)x[k+m](n)).

इस अंकन में को दर्शाता है जो अब तक पढ़े गए मानों में से सबसे छोटा है । एक स्थिरांक है, बफर । i th n x m yx[i](n)ithn xmy

एल्गोरिथ्म भरने से शुरू होता है पहले से सबसे बड़ा करने के लिए, डेटा का सामना करना पड़ा मूल्यों और उन्हें क्रमबद्ध क्रम में रखकर छोटी से छोटी। चलो quantile अनुमान लगाया जा करने के लिए हो सकता है; जैसे, = 0.99। पढ़ने पर तीन संभावित क्रियाएं होती हैं: m q q x n + ymqqxn+1

  • अगर , वेतन वृद्धि । kxn+1<x[k+1](n)k

  • यदि , कुछ नहीं करें।xn+1>x[k+m](n)

  • अन्यथा, को में डालें yxn+1y

किसी भी घटना में, वृद्धि ।n

डालने प्रक्रिया कहते हैं में क्रमबद्ध क्रम में और उसके बाद में चरम मानों में से एक को समाप्त : y yxn+1yy

  • यदि , तो को और वेतन वृद्धि से हटा दें ;x ( n ) [ k + 1 ] y kk+m/2<nqx[k+1](n)yk

  • अन्यथा, निकालें से । yx[k+m](n)y

बशर्ते पर्याप्त रूप से बड़ा हो, यह प्रक्रिया उच्च संभाव्यता के साथ वितरण के सही मात्रा को पूरा करेगी। किसी भी स्तर पर यह करने के मामले में हमेशा की तरह अनुमान लगाया जा सकता और , जो संभवतः में झूठ होगा । (मेरा मानना ​​है कि केवल डेटा की अधिकतम राशि ( ) के वर्गमूल की तरह स्केल करना है , लेकिन मैंने यह साबित करने के लिए कठोर विश्लेषण नहीं किया है।) किसी भी दर पर, एल्गोरिथ्म का पता लगाएगा कि क्या यह सफल हुआ है (द्वारा) की तुलना और करने के लिए )।n एक्स ( एन ) [ क्ष n] एक्स ( एन ) [ क्ष n] y मीटर एन कश्मीर / n ( कश्मीर + मी ) / n क्षmnx[qn](n)x[qn](n)ymNk/n(k+m)/nq

100,000 से अधिक मूल्यों के साथ परीक्षण करना, और (सबसे कठिन मामला) का उपयोग करके इंगित करता है कि इस एल्गोरिथ्म में का सही मान प्राप्त करने में 99.5% सफलता दर है। । मानों की एक धारा के लिए , जिसमें केवल दो मिलियन (लेकिन तीन या चार मिलियन बेहतर विकल्प होंगे) बफर की आवश्यकता होगी। बफ़र के लिए सॉर्ट की गई दोगुनी लिंक की गई सूची का उपयोग करने के लिए या ऑपरेशंस को पहचानने और हटाने के लिए = प्रयास की आवश्यकता होती है । अपेक्षाकृत महंगी प्रविष्टि को आमतौर पर केवल क्ष=.5एक्स ( एन ) [ क्ष n] एन=10 12 हे(लॉग(m=2Nq=.5x[qn](n)N=1012हे(लॉग(एन))हे(1)हे(O(log(N))O(log(N))O(1)हे(एन+O(N)बार। इस प्रकार इस एल्गोरिथ्म की कम्प्यूटेशनल लागतें समय में और भंडारण में हैं।(O(N+Nlog(N))=O(N)O(N)


यह पी 2 एल्गोरिदम का विस्तारित कार्य है। [कड़ी] sim.sagepub.com/content/49/4/159.abstract । मेरे एप्लिकेशन के लिए स्टोरेज अभी भी बहुत अधिक है, जो कुल 10K रैम के साथ छोटे सेंसर पर चलता है। मैं केवल मात्रात्मक अनुमान के लिए कुछ सौ बाइट्स का उपभोग कर सकता हूं।
चीनिनिटी

@ वाउचर वास्तव में मैं विस्तारित पी 2 को लागू करता हूं और इसे विभिन्न वितरणों जैसे कि वर्दी और घातीय से उत्पन्न नमूनों के साथ परीक्षण करता हूं, जहां यह बहुत अच्छा काम करता है। लेकिन जब मैं इसे अपने आवेदन के डेटा के खिलाफ लागू करता हूं, जिसका वितरण अज्ञात है, तो कभी-कभी यह 300% तक सापेक्ष त्रुटि (एब्स (अनुमान - वास्तविक) / वास्तविक) को अभिसरण और पैदावार करने में विफल रहता है।
चीनिनिटी

2
@sino सभी डेटा का उपयोग करने की तुलना में एल्गोरिथ्म की गुणवत्ता पूंछ के भारीपन पर निर्भर नहीं होनी चाहिए। त्रुटि को मापने का एक उचित तरीका यह है: को आनुभविक cdf होने दें । प्रतिशतक के एक अनुमान के लिए , और क्या अंतर है ? यदि यह के आदेश पर है तो आप बहुत अच्छी तरह से कर रहे हैं। दूसरे शब्दों में, सिर्फ P2 एल्गोरिथ्म आपके डेटा के लिए क्या रिटर्न दे रहा है? क्यू क्यू एफ ( क्ष ) एफ ( क्ष ) 1 / nFq^qF(q^)F(q)1/n
whuber

तुम सही हो। मैंने केवल 300% तक सापेक्ष त्रुटि के साथ उल्लेख किए गए मामले के लिए एफ (क्यूˆ) और एफ (क्यू) को मापा। 0.7 की q के लिए, qˆ लगभग 0.7 है, जिसके परिणामस्वरूप नगण्य त्रुटि होती है। हालाँकि, 0.9 के q के लिए, qˆ 0.95 के आसपास लगता है। मुझे लगता है कि इसीलिए मेरे पास 300% तक की बड़ी त्रुटि है। किसी भी विचार क्यों यह 0.95 है, 0.9 नहीं? BTW, मैं यहाँ आंकड़ा पोस्ट कर सकते हैं और मैं गणितीय सूत्र कैसे पोस्ट कर सकता हूँ जैसा आपने किया था?
sinoTrinity

2
@ मैं पूरी तरह आश्वस्त हूं कि मेरा कार्यान्वयन पी 2 के विस्तार के अनुरूप है। 0.9 अभी भी 0.95 या इससे अधिक बड़ा हो जाता है जब मैं एक साथ 0.8, 0.85, 0.9, 0.95 मात्राओं का अनुमान लगाता हूं। हालांकि, 0.9 0.9 के बहुत करीब जाता है यदि एक ही समय में 0.8, 0.85, 0.9, 0.95 और 1.0 मात्राएं ट्रैक की जाती हैं।
चीनिनिटी

5

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

मूल P2 एल्गोरिथ्म के अनुसार , , , , और पर मात्राओं को ट्रैक करने के बजाय , आप बस अधिक मात्राओं (लेकिन अभी भी एक स्थिर संख्या) का ट्रैक रख सकते हैं। ऐसा लगता है कि एल्गोरिथ्म इसके लिए बहुत ही सरल तरीके से अनुमति देता है; आपको बस आने वाले बिंदुओं के लिए सही "बकेट" की गणना करने की जरूरत है, और क्वांटिल्स को अपडेट करने का सही तरीका है (आसन्न संख्याओं का उपयोग करके चतुराई से)।पी / 2 पी ( 1 + पी ) / 2 10p/2p(1+p)/21

कहते हैं कि आप बिंदुओं का ध्यान रखें । आप , , , , पर मात्रात्मक ट्रैकिंग का प्रयास कर सकते हैं0 पी / 12 ... पी 11 / 12 पी , पी + ( 1 - पी ) /250p/12p11/12p , ... , पी + 11 ( 1 - पी ) / 12 , 1 (बीच में equidistantly अंक उठा 0 और पी , और पी और 1 के बीच), या यहां तककि फॉर्म के 22 चेबीशेव नोड्सकाउपयोग करके पी /p+(1p)/12p+11(1p)/1210pp122 औरपी+(1-पी)/2(1+क्योंकि(2मैं-1)πp/2(1+cos(2i1)π22)। यदिp0या1 केकरीब है, तो आप उस तरफ कम अंक डालने का प्रयास कर सकते हैं, जहाँ संभावना कम है और दूसरी तरफ अधिक।p+(1p)/2(1+cos(2i1)π22)p01

यदि आप इसे आगे बढ़ाने का निर्णय लेते हैं, तो मैं (और संभवतः इस साइट पर अन्य) यह जानने में रुचि रखते हैं कि क्या यह काम करता है ...


+1 मुझे लगता है कि यह ओपी की बाधाओं को देखते हुए एक बेहतरीन विचार है। सभी एक उम्मीद कर सकते हैं कि एक सन्निकटन है, इसलिए चाल को ऐसे डिब्बे चुनना है जिनमें संकीर्ण होने और वांछित मात्रा में होने की उच्च संभावना है।
whuber

3

प्रेस एट अल।, न्यूमेरिकल रेसिपीज 8.5.2 "मनमाने ढंग से मात्राओं का एकल पास अनुमान" पी। 435, एक c ++ क्लास IQAgent दें जो एक टुकड़ा-रेखीय-रैखिक अनुमानित cdf को अपडेट करता है।


Books.google.com/ ... ऐसे संस्करण के लिए जिसे फ़्लैश की आवश्यकता नहीं है।
ZachB

2

यह उन एल्गोरिदम से अनुकूलित किया जा सकता है जो ऑनलाइन डेटासेट का माध्य निर्धारित करते हैं। अधिक जानकारी के लिए, इस स्टैकओवरफ़्लो पोस्ट देखें - /programming/1387497/find-median-value-from-a-growing-set


आपके द्वारा लिंक किए गए एल्गोरिदम के लिए आवश्यक कम्प्यूटेशनल संसाधन अनावश्यक रूप से बड़े हैं और इस प्रश्न की आवश्यकताओं को पूरा नहीं करते हैं।
whuber

2

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

संपादित:

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


1

ऑन-लाइन आधार पर (और ट्रैक) मात्राओं का अनुमान लगाना संभव है (यह एक मात्रात्मक प्रतिगमन के मापदंडों पर लागू होता है)। संक्षेप में, यह चेक-लॉस फंक्शन पर स्टोकेस्टिक ग्रेडिएंट डिसेंट को उबालता है जो क्वांटाइल-रिग्रेशन (केवल एक इंटरसेप्ट वाले मॉडल द्वारा दर्शाए जा रहे क्वांटाइल) को परिभाषित करता है, जैसे कि अज्ञात पैरामीटर को अपडेट करते समय और जब अवलोकन आते हैं।

बेल लैब्स का पेपर "बड़े पैमाने पर ट्रैकिंग के लिए वृद्धिशील मात्रात्मक अनुमान" ( ftp://ftp.cse.buffalo.edu/users/azhang/disc/disc01/cd1/out/papers/kdd/p516-chen.pdf ) देखें


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