विचरण की गणना के लिए एल्गोरिदम: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Important algorithms in numerical statistics}} {{Use dmy dates|date=July 2020}} विचरण की गणना के लिए कलन विध...")
 
No edit summary
 
(10 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|Important algorithms in numerical statistics}}
{{Short description|Important algorithms in numerical statistics}}
{{Use dmy dates|date=July 2020}}
'''विचरण की गणना के लिए [[कलन विधि]]''' संगणनात्मक सांख्यिकी में एक प्रमुख भूमिका निभाते हैं। इस समस्या के लिए अच्छे कलन विधि के प्रतिरूप में एक महत्वपूर्ण कठिनाई यह है कि विचरण के सूत्रों में वर्गों का योग सम्मिलित हो सकता है, जिससे बड़े मूल्यों से निपटने के समय [[संख्यात्मक अस्थिरता]] के साथ-साथ अंकगणितीय अतिप्रवाह भी हो सकता है।
विचरण की गणना के लिए [[कलन विधि]] कम्प्यूटेशनल सांख्यिकी में एक प्रमुख भूमिका निभाते हैं। इस समस्या के लिए अच्छे एल्गोरिदम के डिजाइन में एक महत्वपूर्ण कठिनाई यह है कि विचरण के सूत्रों में वर्गों का योग शामिल हो सकता है, जिससे बड़े मूल्यों से निपटने के दौरान [[संख्यात्मक अस्थिरता]] के साथ-साथ अंकगणितीय अतिप्रवाह भी हो सकता है।


==भोला एल्गोरिथ्म==
==अनुभवहीन कलन विधि==
आकार N की संपूर्ण [[सांख्यिकीय जनसंख्या]] के विचरण की गणना के लिए एक सूत्र है:
आकार N की संपूर्ण [[सांख्यिकीय जनसंख्या]] के विचरण की गणना के लिए एक सूत्र है:


:<math>\sigma^2 = \overline{(x^2)} - \bar x^2 = \frac {\sum_{i=1}^N x_i^2 - (\sum_{i=1}^N x_i)^2/N}{N}.</math>
:<math>\sigma^2 = \overline{(x^2)} - \bar x^2 = \frac {\sum_{i=1}^N x_i^2 - (\sum_{i=1}^N x_i)^2/N}{N}.</math>
एन अवलोकनों के एक सीमित सांख्यिकीय नमूने से जनसंख्या भिन्नता के [[अनुमानक पूर्वाग्रह]] अनुमान की गणना करने के लिए बेसेल के सुधार का उपयोग करते हुए, सूत्र है:
''n'' अवलोकनों के एक सीमित सांख्यिकीय प्रतिरूप से जनसंख्या भिन्नता के [[अनुमानक पूर्वाग्रह]] अनुमान की गणना करने के लिए बेसेल के सुधार का उपयोग करते हुए, सूत्र है:


:<math>s^2 = \left(\frac {\sum_{i=1}^n x_i^2} n - \left( \frac {\sum_{i=1}^n x_i} n \right)^2\right) \cdot \frac {n}{n-1}. </math>
:<math>s^2 = \left(\frac {\sum_{i=1}^n x_i^2} n - \left( \frac {\sum_{i=1}^n x_i} n \right)^2\right) \cdot \frac {n}{n-1}. </math>
इसलिए, अनुमानित विचरण की गणना करने के लिए एक सरल एल्गोरिदम निम्नलिखित द्वारा दिया गया है:
इसलिए, अनुमानित विचरण की गणना करने के लिए एक सरल कलन विधि निम्नलिखित द्वारा दिया गया है:


<div शैली= मार्जिन-बाएँ: 35px; चौड़ाई: 600px >
<div शैली= मार्जिन-बाएँ: 35px; चौड़ाई: 600px >
{{framebox|blue}}
{{framebox|blue}}
* होने देना {{math|''n'' ← 0, Sum ← 0, SumSq ← 0}}
* Let {{math|''n'' ← 0, Sum ← 0, SumSq ← 0}}
* प्रत्येक डेटाम के लिए {{mvar|x}}:
* For each datum  {{mvar|x}}:
** {{math|''n'' ← ''n'' + 1}}
** {{math|''n'' ← ''n'' + 1}}
** {{math|Sum ← Sum + ''x''}}
** {{math|Sum ← Sum + ''x''}}
Line 23: Line 22:
</div>
</div>


इस एल्गोरिदम को एक सीमित जनसंख्या के विचरण की गणना करने के लिए आसानी से अनुकूलित किया जा सकता है: बस अंतिम पंक्ति पर n − 1 के बजाय n से विभाजित करें।
इस कलन विधि को एक सीमित जनसंख्या के विचरण की गणना करने के लिए सरलता से अनुकूलित किया जा सकता है: बस अंतिम पंक्ति पर n − 1 के अतिरिक्त n से विभाजित करें।


क्योंकि {{math|SumSq}} और {{math|(Sum×Sum)/''n''}} बहुत समान संख्याएं हो सकती हैं, कैटास्ट्रॉफिक रद्दीकरण के कारण परिणाम की सटीकता (अंकगणित) गणना करने के लिए उपयोग किए जाने वाले [[फ़्लोटिंग-पॉइंट अंकगणित]] की अंतर्निहित सटीकता से बहुत कम हो सकती है। इस प्रकार इस एल्गोरिथम का प्रयोग व्यवहार में नहीं किया जाना चाहिए,<ref name="Einarsson2005">{{cite book|first=Bo|last=Einarsson|title=वैज्ञानिक कंप्यूटिंग में सटीकता और विश्वसनीयता|url=https://books.google.com/books?id=8hrDV5EbrEsC|year=2005|publisher=SIAM|isbn=978-0-89871-584-2|page=47}}</ref><ref name="Chan1983">{{cite journal|url=http://cpsc.yale.edu/sites/default/files/files/tr222.pdf |archive-url=https://ghostarchive.org/archive/20221009/http://cpsc.yale.edu/sites/default/files/files/tr222.pdf |archive-date=2022-10-09 |url-status=live|first1=Tony F.|last1=Chan|author1-link=Tony F. Chan|first2=Gene H.|last2=Golub|author2-link=Gene H. Golub|first3=Randall J.|last3=LeVeque|title=Algorithms for computing the sample variance: Analysis and recommendations|journal=The American Statistician|volume=37|issue=3|pages=242–247|year=1983|jstor=2683386|doi=10.1080/00031305.1983.10483115}}</ref> और कई वैकल्पिक, संख्यात्मक रूप से स्थिर, एल्गोरिदम प्रस्तावित किए गए हैं।<ref name=":1">{{Cite book|last1=Schubert|first1=Erich|last2=Gertz|first2=Michael|date=2018-07-09|title=(सह-)विचरण की संख्यात्मक रूप से स्थिर समानांतर गणना|url=http://dl.acm.org/citation.cfm?id=3221269.3223036|publisher=ACM|pages=10|doi=10.1145/3221269.3223036|isbn=9781450365055|s2cid=49665540}}</ref> यह विशेष रूप से बुरा है यदि मानक विचलन माध्य के सापेक्ष छोटा है।
चूँकि {{math|SumSq}} और {{math|(Sum×Sum)/''n''}} समान संख्याएं हो सकती हैं, आपत्तिजनक निरस्तीकरण के कारण परिणाम की सटीकता की गणना करने के लिए उपयोग किए जाने वाले [[फ़्लोटिंग-पॉइंट अंकगणित|अस्थायी परिकलन]] [[फ़्लोटिंग-पॉइंट अंकगणित|बिन्दु]] की अंतर्निहित सटीकता से बहुत कम हो सकती है। इस प्रकार इस कलन विधि का प्रयोग व्यवहार में नहीं किया जाना चाहिए,<ref name="Einarsson2005">{{cite book|first=Bo|last=Einarsson|title=वैज्ञानिक कंप्यूटिंग में सटीकता और विश्वसनीयता|url=https://books.google.com/books?id=8hrDV5EbrEsC|year=2005|publisher=SIAM|isbn=978-0-89871-584-2|page=47}}</ref><ref name="Chan1983">{{cite journal|url=http://cpsc.yale.edu/sites/default/files/files/tr222.pdf |archive-url=https://ghostarchive.org/archive/20221009/http://cpsc.yale.edu/sites/default/files/files/tr222.pdf |archive-date=2022-10-09 |url-status=live|first1=Tony F.|last1=Chan|author1-link=Tony F. Chan|first2=Gene H.|last2=Golub|author2-link=Gene H. Golub|first3=Randall J.|last3=LeVeque|title=Algorithms for computing the sample variance: Analysis and recommendations|journal=The American Statistician|volume=37|issue=3|pages=242–247|year=1983|jstor=2683386|doi=10.1080/00031305.1983.10483115}}</ref> और कई वैकल्पिक, संख्यात्मक रूप से स्थिर, कलन विधि प्रस्तावित किए गए हैं।<ref name=":1">{{Cite book|last1=Schubert|first1=Erich|last2=Gertz|first2=Michael|date=2018-07-09|title=(सह-)विचरण की संख्यात्मक रूप से स्थिर समानांतर गणना|url=http://dl.acm.org/citation.cfm?id=3221269.3223036|publisher=ACM|pages=10|doi=10.1145/3221269.3223036|isbn=9781450365055|s2cid=49665540}}</ref> यह विशेष रूप से अनैतिक है यदि मानक विचलन माध्य के सापेक्ष छोटा है।


===स्थानांतरित डेटा की कंप्यूटिंग===
===स्थानांतरित डेटा की गणना===


[[स्थान पैरामीटर]] में परिवर्तन के संबंध में भिन्नता [[अपरिवर्तनीय (गणित)]] है, एक संपत्ति जिसका उपयोग इस सूत्र में विनाशकारी रद्दीकरण से बचने के लिए किया जा सकता है।
[[स्थान पैरामीटर|स्थिति पैरामीटर]] में परिवर्तन के संबंध में भिन्नता [[अपरिवर्तनीय (गणित)|अपरिवर्तनीय]] है, एक गुण जिसका उपयोग इस सूत्र में विनाशकारी निरस्तीकरण से बचने के लिए किया जा सकता है।


:<math>\operatorname{Var}(X-K)=\operatorname{Var}(X).</math>
:<math>\operatorname{Var}(X-K)=\operatorname{Var}(X).</math>
साथ <math>K</math> कोई भी स्थिरांक, जो नए सूत्र की ओर ले जाता है
किसी भी स्थिर संख्या <math>K</math> के साथ, नया सूत्र बनता है


:<math>\sigma^2 = \frac {\sum_{i=1}^n (x_i-K)^2 - (\sum_{i=1}^n (x_i-K))^2/n}{n-1}. </math>
:<math>\sigma^2 = \frac {\sum_{i=1}^n (x_i-K)^2 - (\sum_{i=1}^n (x_i-K))^2/n}{n-1}. </math>
करीब <math>K</math> औसत मान जितना अधिक सटीक होगा परिणाम उतना ही सटीक होगा, लेकिन केवल इसके अंदर एक मान चुनना होगा
यदि हम <math>K</math> को निकटतम मान के पास चुनते हैं तो परिणाम अधिक सटीक होगा परंतु केवल प्रतिरूपों की सीमा के अंदर एक मान चुनने से वांछित स्थिरता की गारंटी होगी। यदि मान <math>(x_i - K)</math> छोटे हैं तो इसके वर्गों के योग में कोई समस्या नहीं है, इसके विपरीत, यदि वे बड़े हैं तो इसका अर्थ यह है कि भिन्नता भी बड़ी है। किसी भी स्थिति में सूत्र में दूसरा पद सदैव पहले से छोटा होता है इसलिए कोई निरस्तीकरण नहीं हो सकता है।<ref name="Chan1983" />यदि पहला प्रतिरूप वैल्यू के रूप में K चुना जाता है, तो आप [[पायथन (प्रोग्रामिंग भाषा)|पायथन]] प्रोग्रामिंग भाषा में इस कलन विधि को इस तरह से लिख सकते हैं:<syntaxhighlight lang="python">
नमूनों की रेंज वांछित स्थिरता की गारंटी देगी। यदि मान <math>(x_i - K)</math> छोटे हैं तो इसके वर्गों के योग में कोई समस्या नहीं है, इसके विपरीत, यदि वे बड़े हैं तो इसका मतलब यह है कि भिन्नता भी बड़ी है। किसी भी स्थिति में सूत्र में दूसरा पद हमेशा पहले से छोटा होता है इसलिए कोई रद्दीकरण नहीं हो सकता है।<ref name="Chan1983" />
 
यदि केवल पहला नमूना ही लिया जाए <math>K</math> एल्गोरिदम को [[पायथन (प्रोग्रामिंग भाषा)]] में लिखा जा सकता है
{{original research|date=August 2019}}
<syntaxhighlight lang="python">
def shifted_data_variance(data):
def shifted_data_variance(data):
     if len(data) < 2:
     if len(data) < 2:
Line 85: Line 79:




==दो-पास एल्गोरिथ्म==
==दो-उत्तीर्ण कलन विधि==
एक वैकल्पिक दृष्टिकोण, विचरण के लिए एक अलग सूत्र का उपयोग करते हुए, पहले नमूना माध्य की गणना करता है,
एक वैकल्पिक दृष्टिकोण, विचरण के लिए एक अलग सूत्र का उपयोग करते हुए, पहले प्रतिरूप माध्य की गणना करता है,
:<math>\bar x = \frac {\sum_{j=1}^n x_j} n,</math>
:<math>\bar x = \frac {\sum_{j=1}^n x_j} n,</math>
और फिर माध्य से अंतर के वर्गों के योग की गणना करता है,
और फिर माध्य से अंतर के वर्गों के योग की गणना करता है,
:<math>\text{sample variance} = s^2 = \dfrac {\sum_{i=1}^n (x_i - \bar x)^2}{n-1}, </math>
:<math>\text{sample variance} = s^2 = \dfrac {\sum_{i=1}^n (x_i - \bar x)^2}{n-1}, </math>
जहां s मानक विचलन है. यह निम्नलिखित कोड द्वारा दिया गया है:
जहां s मानक विचलन है यह निम्नलिखित कोड द्वारा दिया गया है:


<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
Line 99: Line 93:
     return variance
     return variance
</syntaxhighlight>
</syntaxhighlight>
यदि n छोटा है तो यह एल्गोरिदम संख्यात्मक रूप से स्थिर है।<ref name="Einarsson2005"/><ref>{{cite book|first=Nicholas | last=Higham |title=Accuracy and Stability of Numerical Algorithms (2 ed) (Problem 1.10)| publisher=SIAM|year=2002}}</ref> हालाँकि, इन दोनों सरल एल्गोरिदम (भोले और दो-पास) के परिणाम डेटा के क्रम पर अत्यधिक निर्भर हो सकते हैं और रकम के संचय में बार-बार राउंडऑफ त्रुटि के कारण बहुत बड़े डेटा सेट के लिए खराब परिणाम दे सकते हैं। इस त्रुटि से कुछ हद तक निपटने के लिए क्षतिपूर्ति योग जैसी तकनीकों का उपयोग किया जा सकता है।
यदि n छोटा है तो यह कलन विधि संख्यात्मक रूप से स्थिर है।<ref name="Einarsson2005"/><ref>{{cite book|first=Nicholas | last=Higham |title=Accuracy and Stability of Numerical Algorithms (2 ed) (Problem 1.10)| publisher=SIAM|year=2002}}</ref> यद्यपि, इन दोनों सरल कलन विधि के परिणाम डेटा के क्रम पर अत्यधिक निर्भर हो सकते हैं और योग, के संचय में बार-बार चारों ओर से त्रुटि के कारण बहुत बड़े डेटा समुच्चय के लिए गलत परिणाम दे सकते हैं। इस त्रुटि से कुछ हद तक निपटने के लिए क्षतिपूर्ति योग जैसी तकनीकों का उपयोग किया जा सकता है।


==वेलफ़ोर्ड का ऑनलाइन एल्गोरिथम==
==वेलफ़ोर्ड का ऑनलाइन कलन विधि==
प्रत्येक मान का निरीक्षण करते हुए, [[एक-पास एल्गोरिथ्म]] में भिन्नता की गणना करने में सक्षम होना अक्सर उपयोगी होता है <math>x_i</math> केवल एकबार; उदाहरण के लिए, जब सभी मूल्यों को रखने के लिए पर्याप्त भंडारण के बिना डेटा एकत्र किया जा रहा हो, या जब मेमोरी एक्सेस की लागत गणना पर हावी हो। ऐसे [[ऑनलाइन एल्गोरिदम]] के लिए, मात्राओं के बीच एक [[पुनरावृत्ति संबंध]] की आवश्यकता होती है जिससे आवश्यक आंकड़ों की गणना संख्यात्मक रूप से स्थिर तरीके से की जा सकती है।
डेटा का परिवर्तन एकीकरण पास में गणना करने की आवश्यकता होती है, जिसमें प्रत्येक मान <math>x_i</math> को केवल एक बार ही देखा जाता है। इसके उदाहरण के रूप में, जब डेटा को कम संभारण विकल्प से एकत्रित किया जाता है या जब मेमोरी एक्सेस की लागत गणना की लागत से अधिक होता है। ऐसे [[ऑनलाइन एल्गोरिदम|ऑनलाइन]] कलन विधि के लिए, मात्राओं के बीच एक [[पुनरावृत्ति संबंध]] की आवश्यकता होती है जिससे आवश्यक आंकड़ों की गणना संख्यात्मक रूप से स्थिर विधि से की जा सकती है।


अतिरिक्त तत्व x के लिए अनुक्रम के माध्य और (अनुमानित) विचरण को अद्यतन करने के लिए निम्नलिखित सूत्रों का उपयोग किया जा सकता है<sub>''n''</sub>. यहाँ, <math display="inline">\overline{x}_n = \frac{1}{n} \sum_{i=1}^n x_i </math> पहले n नमूनों के नमूना माध्य को दर्शाता है <math>(x_1,\dots,x_n)</math>, <math display="inline">\sigma^2_n = \frac{1}{n} \sum_{i=1}^n \left(x_i - \overline{x}_n \right)^2</math> उनका वेरिएंस#बायस्ड_सैंपल_वेरिएंस, और <math display="inline">s^2_n = \frac{1}{n - 1} \sum_{i=1}^n \left(x_i - \overline{x}_n \right)^2</math> उनका भिन्नता#निष्पक्ष_नमूना_भिन्नता।
अतिरिक्त तत्व ''x<sub>n</sub>'' के लिए अनुक्रम के माध्य और अनुमानित विचरण को अद्यतन करने के लिए निम्नलिखित सूत्रों का उपयोग किया जा सकता है यहाँ, <math display="inline">\overline{x}_n = \frac{1}{n} \sum_{i=1}^n x_i </math> पहले n प्रतिरूपों के प्रतिरूप माध्य को दर्शाता है <math>(x_1,\dots,x_n)</math>, <math display="inline">\sigma^2_n = \frac{1}{n} \sum_{i=1}^n \left(x_i - \overline{x}_n \right)^2</math> उनके पक्षपाती प्रतिरूप विचरण, और <math display="inline">s^2_n = \frac{1}{n - 1} \sum_{i=1}^n \left(x_i - \overline{x}_n \right)^2</math> उनका निष्पक्ष  प्रतिरूप विचरण।


:<math>\bar x_n = \frac{(n-1) \, \bar x_{n-1} + x_n}{n} = \bar x_{n-1} + \frac{x_n - \bar x_{n-1}}{n} </math>
:<math>\bar x_n = \frac{(n-1) \, \bar x_{n-1} + x_n}{n} = \bar x_{n-1} + \frac{x_n - \bar x_{n-1}}{n} </math>
:<math>\sigma^2_n = \frac{(n-1) \, \sigma^2_{n-1} + (x_n - \bar x_{n-1})(x_n - \bar x_n)}{n} = \sigma^2_{n-1} + \frac{(x_n - \bar x_{n-1})(x_n - \bar x_n) - \sigma^2_{n-1}}{n}.</math>
:<math>\sigma^2_n = \frac{(n-1) \, \sigma^2_{n-1} + (x_n - \bar x_{n-1})(x_n - \bar x_n)}{n} = \sigma^2_{n-1} + \frac{(x_n - \bar x_{n-1})(x_n - \bar x_n) - \sigma^2_{n-1}}{n}.</math>
:<math>s^2_n = \frac{n-2}{n-1} \, s^2_{n-1} + \frac{(x_n - \bar x_{n-1})^2}{n} = s^2_{n-1} + \frac{(x_n - \bar x_{n-1})^2}{n} - \frac{s^2_{n-1}}{n-1}, \quad n>1 </math>
:<math>s^2_n = \frac{n-2}{n-1} \, s^2_{n-1} + \frac{(x_n - \bar x_{n-1})^2}{n} = s^2_{n-1} + \frac{(x_n - \bar x_{n-1})^2}{n} - \frac{s^2_{n-1}}{n-1}, \quad n>1 </math>
ये सूत्र संख्यात्मक अस्थिरता से ग्रस्त हैं {{cn|date=March 2023}}, क्योंकि वे बार-बार एक बड़ी संख्या से एक छोटी संख्या घटाते हैं जो n के साथ मापी जाती है। अद्यतन करने के लिए एक बेहतर मात्रा वर्तमान माध्य से अंतर के वर्गों का योग है, <math display="inline">\sum_{i=1}^n (x_i - \bar x_n)^2</math>, यहाँ दर्शाया गया है <math>M_{2,n}</math>:
ये सूत्र संख्यात्मक अस्थिरता से ग्रस्त हैं, क्योंकि वे बार-बार एक बड़ी संख्या से एक छोटी संख्या घटाते हैं जो n के साथ मापी जाती है। अद्यतन करने के लिए एक बेहतर मात्रा वर्तमान माध्य से अंतर के वर्गों का योग <math display="inline">\sum_{i=1}^n (x_i - \bar x_n)^2</math> है, यहाँ <math>M_{2,n}</math>दर्शाया गया है :


: <math>\begin{align}
: <math>\begin{align}
Line 116: Line 110:
s^2_n & = \frac{M_{2,n}}{n-1}
s^2_n & = \frac{M_{2,n}}{n-1}
\end{align}</math>
\end{align}</math>
यह एल्गोरिथम वेलफ़ोर्ड द्वारा पाया गया था,<ref>{{cite journal |first=B. P. |last=Welford |year=1962 |title=वर्गों और उत्पादों के सही योग की गणना करने की विधि पर ध्यान दें|journal=[[Technometrics]] |volume=4 |issue=3 |pages=419–420 |jstor=1266577 |doi=10.2307/1266577}}</ref><ref>[[Donald E. Knuth]] (1998). ''[[The Art of Computer Programming]]'', volume 2: ''Seminumerical Algorithms'', 3rd edn., p.&nbsp;232. Boston: Addison-Wesley.</ref> और इसका गहन विश्लेषण किया गया है।<ref name="Chan1983" /><ref>{{cite journal |last=Ling |first=Robert F. |year=1974 |title=नमूना साधनों और भिन्नताओं की गणना के लिए कई एल्गोरिदम की तुलना|journal=Journal of the American Statistical Association |volume=69 |issue=348 |pages=859–866 |doi=10.2307/2286154|jstor=2286154 }}</ref> निरूपित करना भी आम बात है <math>M_k = \bar x_k</math> और <math>S_k = M_{2,k}</math>.<ref>{{cite web| url = http://www.johndcook.com/standard_deviation.html| title = Accurately computing sample variance online}}</ref>
यह कलन विधि वेलफ़ोर्ड द्वारा पाया गया था,<ref>{{cite journal |first=B. P. |last=Welford |year=1962 |title=वर्गों और उत्पादों के सही योग की गणना करने की विधि पर ध्यान दें|journal=[[Technometrics]] |volume=4 |issue=3 |pages=419–420 |jstor=1266577 |doi=10.2307/1266577}}</ref><ref>[[Donald E. Knuth]] (1998). ''[[The Art of Computer Programming]]'', volume 2: ''Seminumerical Algorithms'', 3rd edn., p.&nbsp;232. Boston: Addison-Wesley.</ref> और इसका गहन विश्लेषण किया गया है।<ref name="Chan1983" /><ref>{{cite journal |last=Ling |first=Robert F. |year=1974 |title=नमूना साधनों और भिन्नताओं की गणना के लिए कई एल्गोरिदम की तुलना|journal=Journal of the American Statistical Association |volume=69 |issue=348 |pages=859–866 |doi=10.2307/2286154|jstor=2286154 }}</ref>वेल्फोर्ड ने एकीकरण पास वेरिएंस के लिए यह तकनीक 1962 में प्रस्तुत की थी और यह एक प्रसिद्ध वैरिएंस की गणना का विधि बन गया है। <math>M_k = \bar x_k</math> और <math>S_k = M_{2,k}</math>.<ref>{{cite web| url = http://www.johndcook.com/standard_deviation.html| title = Accurately computing sample variance online}}</ref>वेलफ़ोर्ड के कलन विधिके लिए पायथन कार्यान्वयन का एक उदाहरण नीचे दिया गया है।
वेलफ़ोर्ड के एल्गोरिदम के लिए पायथन कार्यान्वयन का एक उदाहरण नीचे दिया गया है।


<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
Line 142: Line 135:
         return (mean, variance, sampleVariance)
         return (mean, variance, sampleVariance)
</syntaxhighlight>
</syntaxhighlight>
इस एल्गोरिदम में विनाशकारी रद्दीकरण के कारण परिशुद्धता के नुकसान की बहुत कम संभावना है, लेकिन लूप के अंदर विभाजन ऑपरेशन के कारण यह उतना कुशल नहीं हो सकता है। विचरण की गणना के लिए विशेष रूप से मजबूत दो-पास एल्गोरिदम के लिए, कोई पहले माध्य के अनुमान की गणना और घटा सकता है, और फिर अवशेषों पर इस एल्गोरिदम का उपयोग कर सकता है।
इस कलन विधिमें विनाशकारी निरस्तीकरण के कारण परिशुद्धता के हानि की बहुत कम संभावना है, परंतु लूप के अंदर विभाजन परिचालन के कारण यह उतना कुशल नहीं हो सकता है। विचरण की गणना के लिए विशेष रूप से मजबूत दो-पास कलन विधि के लिए, कोई पहले माध्य के अनुमान की गणना को घटा सकता है, और फिर अवशेषों पर इस कलन विधि का उपयोग कर सकता है।


नीचे दिया गया #समानांतर एल्गोरिदम दर्शाता है कि ऑनलाइन गणना किए गए आँकड़ों के कई सेटों को कैसे मर्ज किया जाए।
नीचे दिया गया समानांतर कलन विधि दर्शाता है कि ऑनलाइन गणना किए गए आँकड़ों के कई सममुच्चयों को कैसे विलय किया जाए।


==भारित वृद्धिशील एल्गोरिथ्म==
==भारित वृद्धिशील कलन विधि==
असमान नमूना वजन को संभालने के लिए एल्गोरिदम को बढ़ाया जा सकता है, सरल काउंटर एन को अब तक देखे गए वजन के योग के साथ बदल दिया जा सकता है। पश्चिम (1979)<ref>{{cite journal |first=D. H. D. |last=West |year=1979 |title=Updating Mean and Variance Estimates: An Improved Method |journal=[[Communications of the ACM]] |volume=22 |issue=9 |pages=532–535 |doi=10.1145/359146.359153|s2cid=30671293 |doi-access=free }}</ref> इस [[वृद्धिशील कंप्यूटिंग]] का सुझाव देता है:
असमान प्रतिरूप भार को संभालने के लिए कलन विधि को बढ़ाया जा सकता है, जिसमें आसान काउंटर n को अब अब तक देखे गए भार के योग के साथ बदल दिया जाता है। वेस्ट (1979)<ref>{{cite journal |first=D. H. D. |last=West |year=1979 |title=Updating Mean and Variance Estimates: An Improved Method |journal=[[Communications of the ACM]] |volume=22 |issue=9 |pages=532–535 |doi=10.1145/359146.359153|s2cid=30671293 |doi-access=free }}</ref> इस वृद्धिशील कलन विधि का सुझाव देता है। 


<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
Line 168: Line 161:
</syntaxhighlight>
</syntaxhighlight>


{{further|Weighted arithmetic mean#Weighted sample variance}}
==समानांतर कलन विधि==
 
चान एटअल और उनके सहयोगियों ने उल्लेख किया है कि वेलफोर्ड के ऑनलाइन कलन विधि एक ऐसे कलन विधि की विशेष स्थिति है जो विभिन्न समुच्चय A और समुच्चय B को जोड़ने के लिए काम करता है।<ref name=":0">{{Citation
==समानांतर एल्गोरिदम==
चान एट अल.<ref name=":0">{{Citation
   | last1 = Chan    | first1 = Tony F.      | author1-link = Tony F. Chan
   | last1 = Chan    | first1 = Tony F.      | author1-link = Tony F. Chan
   | last2 = Golub    | first2 = Gene H.      | author2-link = Gene H. Golub
   | last2 = Golub    | first2 = Gene H.      | author2-link = Gene H. Golub
Line 179: Line 170:
   | publisher = Department of Computer Science, Stanford University
   | publisher = Department of Computer Science, Stanford University
   | year = 1979
   | year = 1979
   | contribution-url =http://i.stanford.edu/pub/cstr/reports/cs/tr/79/773/CS-TR-79-773.pdf }}.</ref> ध्यान दें कि ऊपर वर्णित वेलफ़ोर्ड का ऑनलाइन एल्गोरिदम एक एल्गोरिदम का एक विशेष मामला है जो मनमाने सेटों के संयोजन के लिए काम करता है <math>A</math> और <math>B</math>:
   | contribution-url =http://i.stanford.edu/pub/cstr/reports/cs/tr/79/773/CS-TR-79-773.pdf }}.</ref>
:<math>\begin{align}
:<math>\begin{align}
n_{AB} & = n_A + n_B \\
n_{AB} & = n_A + n_B \\
Line 186: Line 177:
M_{2,AB} & = M_{2,A} + M_{2,B} + \delta^2\cdot\frac{n_A n_B}{n_{AB}} \\
M_{2,AB} & = M_{2,A} + M_{2,B} + \delta^2\cdot\frac{n_A n_B}{n_{AB}} \\
\end{align}</math>.
\end{align}</math>.
यह तब उपयोगी हो सकता है जब, उदाहरण के लिए, कई प्रसंस्करण इकाइयों को इनपुट के अलग-अलग हिस्सों को सौंपा जा सकता है।
यह तब उपयोगी हो सकता है जब, उदाहरण के लिए, कई प्रसंस्करण इकाइयों को इनपुट के अलग-अलग भागों को सौंपा जा सकता है।


माध्य का अनुमान लगाने की चैन की विधि संख्यात्मक रूप से अस्थिर होती है <math>n_A \approx n_B</math> और दोनों बड़े हैं, क्योंकि इसमें संख्यात्मक त्रुटि है <math>\delta = \bar x_B - \bar x_A</math> उस तरह से कम नहीं किया गया है जैसा कि इसमें है <math>n_B = 1</math> मामला। ऐसे मामलों में, प्राथमिकता दें <math display="inline">\bar x_{AB} = \frac{n_A \bar x_A + n_B \bar x_B}{n_{AB}}</math>.
माध्य का अनुमान लगाने की चैन की विधि संख्यात्मक रूप से अस्थिर होती है और <math>n_A \approx n_B</math>दोनों बड़े हैं, क्योंकि इसमें संख्यात्मक त्रुटि <math>\delta = \bar x_B - \bar x_A</math> को ऐसे विधियों से नहीं घटाया जाता है जैसे कि <math>n_B = 1</math> के स्थितियों में किया जाता है।
 
ऐसे स्थितियों में, प्राथमिकता दें <math display="inline">\bar x_{AB} = \frac{n_A \bar x_A + n_B \bar x_B}{n_{AB}}</math>.
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
def parallel_variance(n_a, avg_a, M2_a, n_b, avg_b, M2_b):
def parallel_variance(n_a, avg_a, M2_a, n_b, avg_b, M2_b):
Line 197: Line 190:
     return var_ab
     return var_ab
</syntaxhighlight>
</syntaxhighlight>
इसे [[उन्नत वेक्टर एक्सटेंशन]], [[ग्राफ़िक्स प्रोसेसिंग युनिट]] और [[कंप्यूटर क्लस्टर]] और सहप्रसरण के साथ समानांतरीकरण की अनुमति देने के लिए सामान्यीकृत किया जा सकता है।<ref name=":1" />
इसे AVX, GPU और [[कंप्यूटर क्लस्टर]] के साथ समानांतरीकरण और सहप्रसरण की अनुमति देने के लिए सामान्यीकृत किया जा सकता है<ref name=":1" />
 
 
==उदाहरण==
==उदाहरण==
मान लें कि सभी फ़्लोटिंग पॉइंट ऑपरेशन मानक IEEE 754#डबल-प्रिसिजन 64 बिट|IEEE 754 डबल-प्रिसिजन अंकगणित का उपयोग करते हैं। अनंत जनसंख्या से नमूने (4, 7, 13, 16) पर विचार करें। इस नमूने के आधार पर, अनुमानित जनसंख्या माध्य 10 है, और जनसंख्या भिन्नता का निष्पक्ष अनुमान 30 है। भोले एल्गोरिदम और दो-पास एल्गोरिदम दोनों इन मूल्यों की सही गणना करते हैं।
मान लें कि सभी फ़्लोटिंग पॉइंट परिचालन मानक IEEE 754 डबल-प्रिसिजन 64 बिट IEEE 754 डबल-प्रिसिजन अंकगणित का उपयोग करते हैं। अनंत जनसंख्या से प्रतिरूप (4, 7, 13, 16) पर विचार करें। इस प्रतिरूप के आधार पर, अनुमानित जनसंख्या माध्य 10 है, और जनसंख्या भिन्नता का निष्पक्ष अनुमान 30 है। अनुभवहीन कलन विधि और दो-पास कलन विधि दोनों इन मूल्यों की सही गणना करते हैं।


आगे नमूने पर विचार करें ({{nowrap|10<sup>8</sup>&nbsp;+&nbsp;4}}, {{nowrap|10<sup>8</sup>&nbsp;+&nbsp;7}}, {{nowrap|10<sup>8</sup>&nbsp;+&nbsp;13}}, {{nowrap|10<sup>8</sup>&nbsp;+&nbsp;16}}), जो पहले नमूने के समान अनुमानित भिन्नता को जन्म देता है। दो-पास एल्गोरिथ्म इस विचरण अनुमान की सही गणना करता है, लेकिन भोला एल्गोरिथ्म 30 के बजाय 29.33333333333332 लौटाता है।
आगे प्रतिरूप पर विचार करें ({{nowrap|10<sup>8</sup>&nbsp;+&nbsp;4}}, {{nowrap|10<sup>8</sup>&nbsp;+&nbsp;7}}, {{nowrap|10<sup>8</sup>&nbsp;+&nbsp;13}}, {{nowrap|10<sup>8</sup>&nbsp;+&nbsp;16}}), जो पहले प्रतिरूप के समान अनुमानित भिन्नता को उत्पन्न करता है। दो-पास कलन विधि इस विचरण अनुमान की सही गणना करता है, परंतु अनुभवहीन कलन विधि 30 के अतिरिक्त 29.33333333333332 इन मानों की सही गणना करता है।


हालाँकि परिशुद्धता की यह हानि सहनीय हो सकती है और इसे भोले-भाले एल्गोरिदम की एक छोटी सी खामी के रूप में देखा जा सकता है, लेकिन ऑफसेट को और बढ़ाने से त्रुटि भयावह हो जाती है। नमूने पर विचार करें ({{nowrap|10<sup>9</sup>&nbsp;+&nbsp;4}}, {{nowrap|10<sup>9</sup>&nbsp;+&nbsp;7}}, {{nowrap|10<sup>9</sup>&nbsp;+&nbsp;13}}, {{nowrap|10<sup>9</sup>&nbsp;+&nbsp;16}}). फिर से 30 की अनुमानित जनसंख्या भिन्नता की गणना दो-पास एल्गोरिदम द्वारा सही ढंग से की जाती है, लेकिन भोला एल्गोरिदम अब इसे −170.666666666666666 के रूप में गणना करता है। यह भोले-भाले एल्गोरिथम के साथ एक गंभीर समस्या है और एल्गोरिथम के अंतिम चरण में दो समान संख्याओं के घटाव में भयावह रद्दीकरण के कारण है।
यद्यपि परिशुद्धता की यह हानि सहनीय हो सकती है और इस अनुभवहीन कलन विधि की एक छोटी सी कमी के रूप में देखा जा सकता है, परंतु बंदसमुच्चय को और बढ़ाने से त्रुटि भयावह हो जाती है। ({{nowrap|10<sup>9</sup>&nbsp;+&nbsp;4}}, {{nowrap|10<sup>9</sup>&nbsp;+&nbsp;7}}, {{nowrap|10<sup>9</sup>&nbsp;+&nbsp;13}}, {{nowrap|10<sup>9</sup>&nbsp;+&nbsp;16}}) प्रतिरूप पर विचार करें. पुनः 30 की अनुमानित जनसंख्या भिन्नता की गणना दो-पास कलन विधि द्वारा सही ढंग से की जाती है, परंतु अनुभवहीन कलन विधि अब इसे −170.666666666666666 के रूप में गणना करता है। यह अनुभवहीन कलन विधि के साथ एक गंभीर समस्या है और कलन विधि के अंतिम चरण में दो समान संख्याओं के घटाव में भयावह निरस्तीकरण के कारण है।


==उच्च-क्रम आँकड़े==
==उच्च-क्रम आँकड़े==
टेरीबेरी<ref>{{Citation
टेरीबेरी ने चान के सूत्रों को विस्तार किया है जिससे तीसरे और चौथे केंद्रीय क्षणों की गणना की जा सके, जो उदाहरण के लिए त्रिकोणीयता और कुर्तोसिस  की अनुमानित गणना में उपयोगी होते हैं।:<ref>{{Citation
  | last=Terriberry
  | last=Terriberry
  | first=Timothy B.
  | first=Timothy B.
Line 218: Line 209:
  | archive-date=23 April 2014
  | archive-date=23 April 2014
  | url-status=dead
  | url-status=dead
  }}</ref> तीसरे और चौथे [[केंद्रीय क्षण]]ों की गणना के लिए चान के सूत्रों का विस्तार करता है, उदाहरण के लिए [[तिरछापन]] और [[कुकुदता]] का अनुमान लगाते समय आवश्यक:
  }}</ref>
:<math>
:<math>
\begin{align}
\begin{align}
Line 225: Line 216:
                     & {} + 6\delta^2\frac{n_A^2 M_{2,B} + n_B^2 M_{2,A}}{n_X^2} + 4\delta\frac{n_AM_{3,B} - n_BM_{3,A}}{n_X}
                     & {} + 6\delta^2\frac{n_A^2 M_{2,B} + n_B^2 M_{2,A}}{n_X^2} + 4\delta\frac{n_AM_{3,B} - n_BM_{3,A}}{n_X}
\end{align}</math>
\end{align}</math>
यहां ही <math>M_k</math> फिर से माध्य से अंतर की शक्तियों का योग है <math display="inline">\sum(x - \overline{x})^k</math>, देना
यहां <math>M_k</math> पुनः माध्य से अंतर की शक्तियों का योग<math display="inline">\sum(x - \overline{x})^k</math> है यदि
: <math>
: <math>
\begin{align}
\begin{align}
Line 232: Line 223:
\end{align}
\end{align}
</math>
</math>
वृद्धिशील मामले के लिए (अर्थात्, <math>B = \{x\}</math>), इससे यह सरल हो जाता है:
वृद्धिशील स्थितियों के लिए (अर्थात्, <math>B = \{x\}</math>), इससे यह सरल हो जाता है:
: <math>
: <math>
\begin{align}
\begin{align}
Line 242: Line 233:
\end{align}
\end{align}
</math>
</math>
मूल्य को संरक्षित करके <math>\delta / n</math>, केवल एक डिवीजन ऑपरेशन की आवश्यकता है और उच्च-क्रम के आँकड़ों की गणना थोड़ी वृद्धिशील लागत के लिए की जा सकती है।
मूल्य को संरक्षित करके <math>\delta / n</math>, केवल एक डिवीजन परिचालन की आवश्यकता है और उच्च-क्रम के आँकड़ों की गणना थोड़ी वृद्धिशील लागत के लिए की जा सकती है।


जैसा कि वर्णित है, कर्टोसिस के लिए लागू ऑनलाइन एल्गोरिदम का एक उदाहरण है:
जैसा कि वर्णित है, कर्टोसिस के लिए लागू ऑनलाइन कलन विधिका एक उदाहरण है:
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
def online_kurtosis(data):
def online_kurtosis(data):
Line 266: Line 257:
     return kurtosis
     return kurtosis
</syntaxhighlight>
</syntaxhighlight>
पेबे<ref>{{Citation
पेबे ने इन परिणामों को और विस्तारित किया है जो किसी भी अनुक्रम के केंद्रीय क्षणों के लिए उपयुक्त होते हैं,<ref>{{Citation
| last=Pébaÿ
| first=Philippe
| year=2008
| contribution=Formulas for Robust, One-Pass Parallel Computation of Covariances and Arbitrary-Order Statistical Moments
| title=Technical Report SAND2008-6212
| publisher=Sandia National Laboratories
| contribution-url=http://infoserve.sandia.gov/sand_doc/2008/086212.pdf |archive-url=https://ghostarchive.org/archive/20221009/http://infoserve.sandia.gov/sand_doc/2008/086212.pdf |archive-date=2022-10-09 |url-status=live
}}{{Dead link|date=April 2021 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>
वृद्धिशील और जोड़ीदार मामलों के लिए, और बाद में पेबाओ एट अल के लिए, इन परिणामों को मनमाने ढंग से क्रम वाले केंद्रीय क्षणों तक विस्तारित करता है।<ref>{{Citation
  | last1=Pébaÿ
  | last1=Pébaÿ
  | first1=Philippe
  | first1=Philippe
Line 294: Line 276:
  | s2cid=124570169
  | s2cid=124570169
  | url=https://zenodo.org/record/1232635
  | url=https://zenodo.org/record/1232635
  }}</ref>
  }}</ref> इन्क्रीमेंटल और पेयरवाई केस में, और इसके बाद पेबे एट एल ने भारित और मिश्रण केंद्रीय क्षणों के लिए विस्तार किया। वहाँ [[सहप्रसरण]] के समान सूत्र भी मिल सकते हैं।<ref>{{Citation
भारित और मिश्रित क्षणों के लिए. वहाँ [[सहप्रसरण]] के समान सूत्र भी मिल सकते हैं।
| last=Pébaÿ
 
| first=Philippe
चोई और स्वीटमैन<ref name="Choi2010">{{Citation
| year=2008
| contribution=Formulas for Robust, One-Pass Parallel Computation of Covariances and Arbitrary-Order Statistical Moments
| title=Technical Report SAND2008-6212
| publisher=Sandia National Laboratories
| contribution-url=http://infoserve.sandia.gov/sand_doc/2008/086212.pdf |archive-url=https://ghostarchive.org/archive/20221009/http://infoserve.sandia.gov/sand_doc/2008/086212.pdf |archive-date=2022-10-09 |url-status=live
}}{{Dead link|date=April 2021 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>चोई और स्वीटमैन<ref name="Choi2010">{{Citation
  |last1  = Choi
  |last1  = Choi
  |first1 = Myoungkeun
  |first1 = Myoungkeun
Line 310: Line 297:
  |pages=13–24
  |pages=13–24
  |doi=10.1177/1475921709341014
  |doi=10.1177/1475921709341014
}}</ref>
}}</ref> वैषम्य और कुर्टोसिस की गणना करने के लिए दो वैकल्पिक विधियों को प्रस्तुत किया जा सकता है, जिनमें से प्रत्येक कुछ अनुप्रयोगों में पर्याप्त कंप्यूटर मेमोरी आवश्यकताओं और सीपीयू समय को बचा सकता है। पहला दृष्टिकोण डेटा को बिन  में अलग करके सांख्यिकीय क्षणों की गणना करना है और फिर परिणामी हिस्टोग्राम की ज्यामिति से क्षणों की गणना करना है, जो प्रभावी रूप से उच्च क्षणों के लिए एक-पास कलन विधि बन जाता है। एक लाभ यह है कि सांख्यिकीय क्षण की गणना यादृच्छिक सटीकता के साथ किया जा सकता है, जिससे गणना को सटीकता के साथ ट्यून किया जा सकता है, उदाहरण के लिए, डेटा भंडारण प्रारूप या मूल माप हार्डवेयर। एक यादृच्छिक चर का एक सापेक्ष हिस्टोग्राम पारंपरिक विधियों से बनाया जा सकता है: संभावित मूल्यों की सीमा को बिन  में विभाजित किया जाता है और प्रत्येक बिन के भीतर घटनाओं की संख्या को गिना और प्लॉट किया जाता है जिससे  प्रत्येक आयत का क्षेत्र उस बिन के भीतर प्रतिरूप मूल्यों के भागों के बराबर हो:
तिरछापन और कुर्टोसिस की गणना करने के लिए दो वैकल्पिक तरीकों की पेशकश करें, जिनमें से प्रत्येक कुछ अनुप्रयोगों में पर्याप्त कंप्यूटर मेमोरी आवश्यकताओं और सीपीयू समय को बचा सकता है। पहला दृष्टिकोण डेटा को डिब्बे में अलग करके सांख्यिकीय क्षणों की गणना करना है और फिर परिणामी हिस्टोग्राम की ज्यामिति से क्षणों की गणना करना है, जो प्रभावी रूप से उच्च क्षणों के लिए एक-पास एल्गोरिदम बन जाता है। एक लाभ यह है कि सांख्यिकीय क्षण की गणना मनमानी सटीकता के साथ की जा सकती है, जैसे कि गणना को सटीकता के साथ ट्यून किया जा सकता है, उदाहरण के लिए, डेटा भंडारण प्रारूप या मूल माप हार्डवेयर। एक यादृच्छिक चर का एक सापेक्ष हिस्टोग्राम पारंपरिक तरीके से बनाया जा सकता है: संभावित मूल्यों की सीमा को डिब्बे में विभाजित किया जाता है और प्रत्येक बिन के भीतर घटनाओं की संख्या को गिना और प्लॉट किया जाता है ताकि प्रत्येक आयत का क्षेत्र उस बिन के भीतर नमूना मूल्यों के हिस्से के बराबर हो:


: <math> H(x_k)=\frac{h(x_k)}{A}</math>
: <math> H(x_k)=\frac{h(x_k)}{A}</math>
कहाँ <math>h(x_k)</math> और <math>H(x_k)</math> बिन पर आवृत्ति और सापेक्ष आवृत्ति का प्रतिनिधित्व करें <math>x_k</math> और <math display="inline">A= \sum_{k=1}^K h(x_k) \,\Delta x_k</math> हिस्टोग्राम का कुल क्षेत्रफल है. इस सामान्यीकरण के बाद, <math>n</math> कच्चे क्षण और केंद्रीय क्षण <math>x(t)</math> सापेक्ष हिस्टोग्राम से गणना की जा सकती है:
यहाँ <math>h(x_k)</math> और <math>H(x_k)</math> बिन पर आवृत्ति और सापेक्ष आवृत्ति का प्रतिनिधित्व करें <math>x_k</math> और <math display="inline">A= \sum_{k=1}^K h(x_k) \,\Delta x_k</math> हिस्टोग्राम का कुल क्षेत्रफल है. इस सामान्यीकरण के बाद, <math>n</math> क्षण और केंद्रीय क्षण <math>x(t)</math> सापेक्ष हिस्टोग्राम से गणना की जा सकती है:


: <math>
: <math>
Line 324: Line 310:
               = \frac{1}{A} \sum_{k=1}^{K} \Big(x_k-m_1^{(h)}\Big)^n h(x_k) \, \Delta x_k
               = \frac{1}{A} \sum_{k=1}^{K} \Big(x_k-m_1^{(h)}\Big)^n h(x_k) \, \Delta x_k
</math>
</math>
जहां सुपरस्क्रिप्ट <math>^{(h)}</math> इंगित करता है कि क्षणों की गणना हिस्टोग्राम से की जाती है। निरंतर बिन चौड़ाई के लिए <math>\Delta x_k=\Delta x</math> इन दो अभिव्यक्तियों का उपयोग करके सरल बनाया जा सकता है <math>I= A/\Delta x</math>:
जहां सुपरस्क्रिप्ट <math>^{(h)}</math> इंगित करता है कि क्षणों की गणना हिस्टोग्राम से की जाती है। निरंतर बिन चौड़ाई के लिए <math>\Delta x_k=\Delta x</math> इन दो अभिव्यक्तियों का उपयोग करके <math>I= A/\Delta x</math> को सरल बनाया जा सकता है :


: <math>
: <math>
Line 332: Line 318:
  \theta_n^{(h)}= \frac{1}{I} \sum_{k=1}^K \Big(x_k-m_1^{(h)}\Big)^n h(x_k)
  \theta_n^{(h)}= \frac{1}{I} \sum_{k=1}^K \Big(x_k-m_1^{(h)}\Big)^n h(x_k)
</math>
</math>
चोई और स्वीटमैन का दूसरा दृष्टिकोण<ref name="Choi2010" />समय-इतिहास के अलग-अलग खंडों से सांख्यिकीय क्षणों को संयोजित करने की एक विश्लेषणात्मक पद्धति है, ताकि परिणामी समग्र क्षण संपूर्ण समय-इतिहास के हों। इस पद्धति का उपयोग उन क्षणों के बाद के संयोजन के साथ सांख्यिकीय क्षणों की समानांतर गणना के लिए, या अनुक्रमिक समय पर गणना किए गए सांख्यिकीय क्षणों के संयोजन के लिए किया जा सकता है।
चोई और स्वीटमैन का दूसरा दृष्टिकोण<ref name="Choi2010" />समय-इतिहास के अलग-अलग खंडों से सांख्यिकीय क्षणों को संयोजित करने की एक विश्लेषणात्मक पद्धति है, जिससे परिणामी समग्र क्षण संपूर्ण समय-इतिहास के हों। इस पद्धति का उपयोग उन क्षणों के बाद के संयोजन के साथ सांख्यिकीय क्षणों की समानांतर गणना के लिए, या अनुक्रमिक समय पर गणना किए गए सांख्यिकीय क्षणों के संयोजन के लिए किया जा सकता है।


अगर <math>Q</math> सांख्यिकीय क्षणों के सेट ज्ञात हैं:
यदि <math>Q</math> सांख्यिकीय क्षणों के समुच्चय <math>(\gamma_{0,q},\mu_{q},\sigma^2_{q},\alpha_{3,q},\alpha_{4,q})
<math>(\gamma_{0,q},\mu_{q},\sigma^2_{q},\alpha_{3,q},\alpha_{4,q})
\quad </math>के लिए <math>q=1,2,\ldots,Q </math>, ज्ञात हैं फिर प्रत्येक <math>\gamma_n</math> को समतुल्य के रूप में व्यक्त किया जा सकता है :
\quad </math> के लिए <math>q=1,2,\ldots,Q </math>, फिर प्रत्येक <math>\gamma_n</math> कर सकना
समकक्ष के रूप में व्यक्त किया जाए <math>n</math> कच्चे क्षण:


: <math>
: <math>
\gamma_{n,q}= m_{n,q} \gamma_{0,q} \qquad \quad \textrm{for} \quad n=1,2,3,4  \quad \text{ and } \quad q = 1,2, \dots ,Q
\gamma_{n,q}= m_{n,q} \gamma_{0,q} \qquad \quad \textrm{for} \quad n=1,2,3,4  \quad \text{ and } \quad q = 1,2, \dots ,Q
</math>
</math>
कहाँ <math>\gamma_{0,q}</math> आम तौर पर की अवधि के रूप में लिया जाता है <math>q^{th}</math> समय-इतिहास, या अंकों की संख्या यदि <math>\Delta t</math> स्थिर है.
यहाँ <math>\gamma_{0,q}</math> सामान्यतः की अवधि <math>q^{th}</math> के रूप में लिया जाता है  समय-इतिहास, या अंकों की संख्या यदि <math>\Delta t</math> स्थिर है.


सांख्यिकीय क्षणों को के रूप में व्यक्त करने का लाभ <math>\gamma</math> है कि <math>Q</math> सेट को जोड़कर जोड़ा जा सकता है, और इसके मूल्य पर कोई ऊपरी सीमा नहीं है <math>Q</math>.
सांख्यिकीय क्षणों को के रूप में व्यक्त करने का लाभ <math>\gamma</math> है और <math>Q</math> समुच्चय को छोड़कर जोड़ा जा सकता है, और इसके मूल्य <math>Q</math> पर कोई ऊपरी सीमा नहीं है


: <math>
: <math>
Line 354: Line 338:
  m_{n,c}=\frac{\gamma_{n,c}}{\gamma_{0,c}} \quad \text{for } n=1,2,3,4
  m_{n,c}=\frac{\gamma_{n,c}}{\gamma_{0,c}} \quad \text{for } n=1,2,3,4
</math>
</math>
कच्चे क्षणों के बीच ज्ञात संबंध (<math>m_n</math>) और केंद्रीय क्षण (<math> \theta_n = \operatorname E[(x-\mu)^n])</math>)
कच्चे क्षणों के बीच ज्ञात संबंध (<math>m_n</math>) और केंद्रीय क्षण (<math> \theta_n = \operatorname E[(x-\mu)^n])</math>)फिर संघटित समय-इतिहास के केंद्रीय क्षणों की गणना करने के लिए उपयोग किया जाता है। अंत में, संक्षिप्त इतिहास के सांख्यिकीय क्षणों की गणना केंद्रीय क्षणों से की जाती है:
फिर संघटित समय-इतिहास के केंद्रीय क्षणों की गणना करने के लिए उपयोग किया जाता है। अंत में, संक्षिप्त इतिहास के सांख्यिकीय क्षणों की गणना केंद्रीय क्षणों से की जाती है:


: <math>
: <math>
Line 366: Line 349:


==सहप्रसरण==
==सहप्रसरण==
सहप्रसरण की गणना के लिए बहुत समान एल्गोरिदम का उपयोग किया जा सकता है।
सहप्रसरण की गणना के लिए बहुत समान कलन विधिका उपयोग किया जा सकता है।


===भोला एल्गोरिथ्म===
===अनुभवहीन कलन विधि===
भोला एल्गोरिथ्म है
अनुभवहीन कलन विधि है
:<math>\operatorname{Cov}(X,Y) = \frac {\sum_{i=1}^n x_i y_i - (\sum_{i=1}^n x_i)(\sum_{i=1}^n y_i)/n}{n}. </math>
:<math>\operatorname{Cov}(X,Y) = \frac {\sum_{i=1}^n x_i y_i - (\sum_{i=1}^n x_i)(\sum_{i=1}^n y_i)/n}{n}. </math>
उपरोक्त एल्गोरिदम के लिए, कोई निम्नलिखित पायथन कोड का उपयोग कर सकता है:
उपरोक्त कलन विधिके लिए, कोई निम्नलिखित पायथन कोड का उपयोग कर सकता है:
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
def naive_covariance(data1, data2):
def naive_covariance(data1, data2):
Line 388: Line 371:


:<math>\operatorname{Cov}(X,Y) = \operatorname{Cov}(X-k_x,Y-k_y) = \dfrac {\sum_{i=1}^n (x_i-k_x) (y_i-k_y) - (\sum_{i=1}^n (x_i-k_x))(\sum_{i=1}^n (y_i-k_y))/n}{n}. </math>
:<math>\operatorname{Cov}(X,Y) = \operatorname{Cov}(X-k_x,Y-k_y) = \dfrac {\sum_{i=1}^n (x_i-k_x) (y_i-k_y) - (\sum_{i=1}^n (x_i-k_x))(\sum_{i=1}^n (y_i-k_y))/n}{n}. </math>
और फिर से मूल्यों की सीमा के अंदर एक मूल्य चुनने से भयावह रद्दीकरण के खिलाफ फॉर्मूला स्थिर हो जाएगा और साथ ही बड़ी रकम के खिलाफ यह अधिक मजबूत हो जाएगा। प्रत्येक डेटा सेट का पहला मान लेते हुए, एल्गोरिदम को इस प्रकार लिखा जा सकता है:
और फिर से मूल्यों की सीमा के अंदर एक मूल्य चुनने से भयावह निरस्तीकरण के खिलाफ फॉर्मूला स्थिर हो जाएगा और साथ ही बड़ी रकम के खिलाफ यह अधिक मजबूत हो जाएगा। प्रत्येक डेटा समुच्चय  का पहला मान लेते हुए, कलन विधिको इस प्रकार लिखा जा सकता है:


<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
Line 407: Line 390:


===दो-पास===
===दो-पास===
दो-पास एल्गोरिथ्म पहले नमूना माध्य की गणना करता है, और फिर सहप्रसरण की:
दो-पास कलन विधि पहले प्रतिरूप  माध्य की गणना करता है, और फिर सहप्रसरण की:
:<math>\bar x = \sum_{i=1}^n x_i/n</math>
:<math>\bar x = \sum_{i=1}^n x_i/n</math>
:<math>\bar y = \sum_{i=1}^n y_i/n</math>
:<math>\bar y = \sum_{i=1}^n y_i/n</math>
:<math>\operatorname{Cov}(X,Y) = \frac {\sum_{i=1}^n (x_i - \bar x)(y_i - \bar y)}{n}. </math>
:<math>\operatorname{Cov}(X,Y) = \frac {\sum_{i=1}^n (x_i - \bar x)(y_i - \bar y)}{n}. </math>
दो-पास एल्गोरिथ्म को इस प्रकार लिखा जा सकता है:
दो-पास कलन विधि को इस प्रकार लिखा जा सकता है:
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
def two_pass_covariance(data1, data2):
def two_pass_covariance(data1, data2):
Line 425: Line 408:
     return covariance
     return covariance
</syntaxhighlight>
</syntaxhighlight>
थोड़ा अधिक सटीक मुआवजा संस्करण अवशेषों पर पूर्ण अनुभवहीन एल्गोरिदम निष्पादित करता है। अंतिम रकम <math display="inline">\sum_i x_i</math> और <math display="inline">\sum_i y_i</math> शून्य होना चाहिए, लेकिन दूसरा पास किसी भी छोटी त्रुटि की भरपाई करता है।
थोड़ा अधिक सटीक मुआवजा संस्करण अवशेषों पर पूर्ण अनुभवहीन कलन विधिनिष्पादित करता है। अंतिम रकम <math display="inline">\sum_i x_i</math> और <math display="inline">\sum_i y_i</math> शून्य होना चाहिए, लेकिन दूसरा पास किसी भी छोटी त्रुटि की भरपाई करता है।


===ऑनलाइन===
===ऑनलाइन===


एक स्थिर वन-पास एल्गोरिदम मौजूद है, जो विचरण की गणना के लिए ऑनलाइन एल्गोरिदम के समान है, जो सह-पल की गणना करता है <math display="inline"> C_n = \sum_{i=1}^n (x_i - \bar x_n)(y_i - \bar y_n)</math>:
एक स्थिर वन-पास कलन विधिमौजूद है, जो विचरण की गणना के लिए ऑनलाइन कलन विधिके समान है, जो सह-पल की गणना करता है <math display="inline"> C_n = \sum_{i=1}^n (x_i - \bar x_n)(y_i - \bar y_n)</math>:
:<math>\begin{alignat}{2}
:<math>\begin{alignat}{2}
\bar x_n &= \bar x_{n-1} &\,+\,& \frac{x_n - \bar x_{n-1}}{n} \\[5pt]
\bar x_n &= \bar x_{n-1} &\,+\,& \frac{x_n - \bar x_{n-1}}{n} \\[5pt]
Line 436: Line 419:
         &= C_{n-1}      &\,+\,& (x_n - \bar x_{n-1})(y_n - \bar y_n)
         &= C_{n-1}      &\,+\,& (x_n - \bar x_{n-1})(y_n - \bar y_n)
\end{alignat}</math>
\end{alignat}</math>
उस अंतिम समीकरण में स्पष्ट विषमता इस तथ्य के कारण है <math display="inline"> (x_n - \bar x_n) = \frac{n-1}{n}(x_n - \bar x_{n-1})</math>, इसलिए दोनों अद्यतन शर्तें समान हैं <math display="inline"> \frac{n-1}{n}(x_n - \bar x_{n-1})(y_n - \bar y_{n-1})</math>. पहले साधनों की गणना करके, फिर अवशेषों पर स्थिर वन-पास एल्गोरिदम का उपयोग करके और भी अधिक सटीकता प्राप्त की जा सकती है।
उस अंतिम समीकरण में स्पष्ट विषमता इस तथ्य के कारण है <math display="inline"> (x_n - \bar x_n) = \frac{n-1}{n}(x_n - \bar x_{n-1})</math>, इसलिए दोनों अद्यतन शर्तें समान हैं <math display="inline"> \frac{n-1}{n}(x_n - \bar x_{n-1})(y_n - \bar y_{n-1})</math>. पहले साधनों की गणना करके, फिर अवशेषों पर स्थिर वन-पास कलन विधिका उपयोग करके और भी अधिक सटीकता प्राप्त की जा सकती है।


इस प्रकार सहप्रसरण की गणना इस प्रकार की जा सकती है
इस प्रकार सहप्रसरण की गणना इस प्रकार की जा सकती है
Line 482: Line 465:
     sample_reliability_covar = C / (wsum - wsum2 / wsum)
     sample_reliability_covar = C / (wsum - wsum2 / wsum)
</syntaxhighlight>
</syntaxhighlight>
इसी तरह, दो सेटों के सहप्रसरणों को संयोजित करने का एक सूत्र है जिसका उपयोग गणना को समानांतर करने के लिए किया जा सकता है:<ref name=":1" />
इसी तरह, दो समुच्चय ों के सहप्रसरणों को संयोजित करने का एक सूत्र है जिसका उपयोग गणना को समानांतर करने के लिए किया जा सकता है:<ref name=":1" />


:<math>C_X = C_A + C_B + (\bar x_A - \bar x_B)(\bar y_A - \bar y_B)\cdot\frac{n_A n_B}{n_X}. </math>
:<math>C_X = C_A + C_B + (\bar x_A - \bar x_B)(\bar y_A - \bar y_B)\cdot\frac{n_A n_B}{n_X}. </math>
Line 489: Line 472:
===भारित बैच संस्करण===
===भारित बैच संस्करण===


भारित ऑनलाइन एल्गोरिथम का एक संस्करण जो बैच अद्यतन करता है वह भी मौजूद है: चलो <math>w_1, \dots w_N</math> वज़न दर्शाएं और लिखें
भारित ऑनलाइन कलन विधि का एक संस्करण जो बैच अद्यतन करता है वह भी उपस्थित है: प्रायः <math>w_1, \dots w_N</math>भार दर्शाएं और लिखें


:<math>\begin{alignat}{2}
:<math>\begin{alignat}{2}
Line 503: Line 486:


==यह भी देखें==
==यह भी देखें==
*कहान योग एल्गोरिथ्म
*कहान योग कलन विधि
*[[माध्य से वर्ग विचलन]]
*[[माध्य से वर्ग विचलन]]
*[[यामार्टिनो विधि]]
*[[यामार्टिनो विधि]]
Line 514: Line 497:
* {{MathWorld|title=Sample Variance Computation|urlname=SampleVarianceComputation}}
* {{MathWorld|title=Sample Variance Computation|urlname=SampleVarianceComputation}}


{{DEFAULTSORT:Algorithms For Calculating Variance}}[[Category: सांख्यिकीय एल्गोरिदम]] [[Category: सांख्यिकीय विचलन और फैलाव]] [[Category: स्यूडोकोड उदाहरण सहित लेख]] [[Category: उदाहरण के लिए पायथन (प्रोग्रामिंग भाषा) कोड वाले लेख]]
{{DEFAULTSORT:Algorithms For Calculating Variance}}
 
 


[[Category: Machine Translated Page]]
[[Category:All articles with dead external links]]
[[Category:Created On 25/07/2023]]
[[Category:Articles with dead external links from April 2021]]
[[Category:Articles with permanently dead external links]]
[[Category:Created On 25/07/2023|Algorithms For Calculating Variance]]
[[Category:Lua-based templates|Algorithms For Calculating Variance]]
[[Category:Machine Translated Page|Algorithms For Calculating Variance]]
[[Category:Pages with script errors|Algorithms For Calculating Variance]]
[[Category:Short description with empty Wikidata description|Algorithms For Calculating Variance]]
[[Category:Templates Vigyan Ready|Algorithms For Calculating Variance]]
[[Category:Templates that add a tracking category|Algorithms For Calculating Variance]]
[[Category:Templates that generate short descriptions|Algorithms For Calculating Variance]]
[[Category:Templates using TemplateData|Algorithms For Calculating Variance]]
[[Category:उदाहरण के लिए पायथन (प्रोग्रामिंग भाषा) कोड वाले लेख|Algorithms For Calculating Variance]]
[[Category:सांख्यिकीय एल्गोरिदम|Algorithms For Calculating Variance]]
[[Category:सांख्यिकीय विचलन और फैलाव|Algorithms For Calculating Variance]]
[[Category:स्यूडोकोड उदाहरण सहित लेख|Algorithms For Calculating Variance]]

Latest revision as of 09:47, 11 August 2023

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

अनुभवहीन कलन विधि

आकार N की संपूर्ण सांख्यिकीय जनसंख्या के विचरण की गणना के लिए एक सूत्र है:

n अवलोकनों के एक सीमित सांख्यिकीय प्रतिरूप से जनसंख्या भिन्नता के अनुमानक पूर्वाग्रह अनुमान की गणना करने के लिए बेसेल के सुधार का उपयोग करते हुए, सूत्र है:

इसलिए, अनुमानित विचरण की गणना करने के लिए एक सरल कलन विधि निम्नलिखित द्वारा दिया गया है:

  • Let n ← 0, Sum ← 0, SumSq ← 0
  • For each datum x:
    • nn + 1
    • Sum ← Sum + x
    • SumSq ← SumSq + x × x
  • Var = (SumSq − (Sum × Sum) / n) / (n − 1)

इस कलन विधि को एक सीमित जनसंख्या के विचरण की गणना करने के लिए सरलता से अनुकूलित किया जा सकता है: बस अंतिम पंक्ति पर n − 1 के अतिरिक्त n से विभाजित करें।

चूँकि SumSq और (Sum×Sum)/n समान संख्याएं हो सकती हैं, आपत्तिजनक निरस्तीकरण के कारण परिणाम की सटीकता की गणना करने के लिए उपयोग किए जाने वाले अस्थायी परिकलन बिन्दु की अंतर्निहित सटीकता से बहुत कम हो सकती है। इस प्रकार इस कलन विधि का प्रयोग व्यवहार में नहीं किया जाना चाहिए,[1][2] और कई वैकल्पिक, संख्यात्मक रूप से स्थिर, कलन विधि प्रस्तावित किए गए हैं।[3] यह विशेष रूप से अनैतिक है यदि मानक विचलन माध्य के सापेक्ष छोटा है।

स्थानांतरित डेटा की गणना

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

किसी भी स्थिर संख्या के साथ, नया सूत्र बनता है

यदि हम को निकटतम मान के पास चुनते हैं तो परिणाम अधिक सटीक होगा परंतु केवल प्रतिरूपों की सीमा के अंदर एक मान चुनने से वांछित स्थिरता की गारंटी होगी। यदि मान छोटे हैं तो इसके वर्गों के योग में कोई समस्या नहीं है, इसके विपरीत, यदि वे बड़े हैं तो इसका अर्थ यह है कि भिन्नता भी बड़ी है। किसी भी स्थिति में सूत्र में दूसरा पद सदैव पहले से छोटा होता है इसलिए कोई निरस्तीकरण नहीं हो सकता है।[2]यदि पहला प्रतिरूप वैल्यू के रूप में K चुना जाता है, तो आप पायथन प्रोग्रामिंग भाषा में इस कलन विधि को इस तरह से लिख सकते हैं:

def shifted_data_variance(data):
    if len(data) < 2:
        return 0.0
    K = data[0]
    n = Ex = Ex2 = 0.0
    for x in data:
        n += 1
        Ex += x - K
        Ex2 += (x - K) ** 2
    variance = (Ex2 - Ex**2 / n) / (n - 1)
    # use n instead of (n-1) if want to compute the exact variance of the given data
    # use (n-1) if data are samples of a larger population
    return variance

यह सूत्र वृद्धिशील गणना को भी सुविधाजनक बनाता है जिसे इस प्रकार व्यक्त किया जा सकता है

K = Ex = Ex2 = 0.0
n = 0


def add_variable(x):
    global K, n, Ex, Ex2
    if n == 0:
        K = x
    n += 1
    Ex += x - K
    Ex2 += (x - K) ** 2

def remove_variable(x):
    global K, n, Ex, Ex2
    n -= 1
    Ex -= x - K
    Ex2 -= (x - K) ** 2

def get_mean():
    global K, n, Ex
    return K + Ex / n

def get_variance():
    global n, Ex, Ex2
    return (Ex2 - Ex**2 / n) / (n - 1)


दो-उत्तीर्ण कलन विधि

एक वैकल्पिक दृष्टिकोण, विचरण के लिए एक अलग सूत्र का उपयोग करते हुए, पहले प्रतिरूप माध्य की गणना करता है,

और फिर माध्य से अंतर के वर्गों के योग की गणना करता है,

जहां s मानक विचलन है यह निम्नलिखित कोड द्वारा दिया गया है:

def two_pass_variance(data):
    n = len(data)
    mean = sum(data) / n
    variance = sum([(x - mean) ** 2 for x in data]) / (n - 1)
    return variance

यदि n छोटा है तो यह कलन विधि संख्यात्मक रूप से स्थिर है।[1][4] यद्यपि, इन दोनों सरल कलन विधि के परिणाम डेटा के क्रम पर अत्यधिक निर्भर हो सकते हैं और योग, के संचय में बार-बार चारों ओर से त्रुटि के कारण बहुत बड़े डेटा समुच्चय के लिए गलत परिणाम दे सकते हैं। इस त्रुटि से कुछ हद तक निपटने के लिए क्षतिपूर्ति योग जैसी तकनीकों का उपयोग किया जा सकता है।

वेलफ़ोर्ड का ऑनलाइन कलन विधि

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

अतिरिक्त तत्व xn के लिए अनुक्रम के माध्य और अनुमानित विचरण को अद्यतन करने के लिए निम्नलिखित सूत्रों का उपयोग किया जा सकता है यहाँ, पहले n प्रतिरूपों के प्रतिरूप माध्य को दर्शाता है , उनके पक्षपाती प्रतिरूप विचरण, और उनका निष्पक्ष प्रतिरूप विचरण।

ये सूत्र संख्यात्मक अस्थिरता से ग्रस्त हैं, क्योंकि वे बार-बार एक बड़ी संख्या से एक छोटी संख्या घटाते हैं जो n के साथ मापी जाती है। अद्यतन करने के लिए एक बेहतर मात्रा वर्तमान माध्य से अंतर के वर्गों का योग है, यहाँ दर्शाया गया है :

यह कलन विधि वेलफ़ोर्ड द्वारा पाया गया था,[5][6] और इसका गहन विश्लेषण किया गया है।[2][7]वेल्फोर्ड ने एकीकरण पास वेरिएंस के लिए यह तकनीक 1962 में प्रस्तुत की थी और यह एक प्रसिद्ध वैरिएंस की गणना का विधि बन गया है। और .[8]वेलफ़ोर्ड के कलन विधिके लिए पायथन कार्यान्वयन का एक उदाहरण नीचे दिया गया है।

# For a new value newValue, compute the new count, new mean, the new M2.
# mean accumulates the mean of the entire dataset
# M2 aggregates the squared distance from the mean
# count aggregates the number of samples seen so far
def update(existingAggregate, newValue):
    (count, mean, M2) = existingAggregate
    count += 1
    delta = newValue - mean
    mean += delta / count
    delta2 = newValue - mean
    M2 += delta * delta2
    return (count, mean, M2)

# Retrieve the mean, variance and sample variance from an aggregate
def finalize(existingAggregate):
    (count, mean, M2) = existingAggregate
    if count < 2:
        return float("nan")
    else:
        (mean, variance, sampleVariance) = (mean, M2 / count, M2 / (count - 1))
        return (mean, variance, sampleVariance)

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

नीचे दिया गया समानांतर कलन विधि दर्शाता है कि ऑनलाइन गणना किए गए आँकड़ों के कई सममुच्चयों को कैसे विलय किया जाए।

भारित वृद्धिशील कलन विधि

असमान प्रतिरूप भार को संभालने के लिए कलन विधि को बढ़ाया जा सकता है, जिसमें आसान काउंटर n को अब अब तक देखे गए भार के योग के साथ बदल दिया जाता है। वेस्ट (1979)[9] इस वृद्धिशील कलन विधि का सुझाव देता है।

def weighted_incremental_variance(data_weight_pairs):
    w_sum = w_sum2 = mean = S = 0

    for x, w in data_weight_pairs:
        w_sum = w_sum + w
        w_sum2 = w_sum2 + w**2
        mean_old = mean
        mean = mean_old + (w / w_sum) * (x - mean_old)
        S = S + w * (x - mean_old) * (x - mean)

    population_variance = S / w_sum
    # Bessel's correction for weighted samples
    # Frequency weights
    sample_frequency_variance = S / (w_sum - 1)
    # Reliability weights
    sample_reliability_variance = S / (w_sum - w_sum2 / w_sum)

समानांतर कलन विधि

चान एटअल और उनके सहयोगियों ने उल्लेख किया है कि वेलफोर्ड के ऑनलाइन कलन विधि एक ऐसे कलन विधि की विशेष स्थिति है जो विभिन्न समुच्चय A और समुच्चय B को जोड़ने के लिए काम करता है।[10]

.

यह तब उपयोगी हो सकता है जब, उदाहरण के लिए, कई प्रसंस्करण इकाइयों को इनपुट के अलग-अलग भागों को सौंपा जा सकता है।

माध्य का अनुमान लगाने की चैन की विधि संख्यात्मक रूप से अस्थिर होती है और दोनों बड़े हैं, क्योंकि इसमें संख्यात्मक त्रुटि को ऐसे विधियों से नहीं घटाया जाता है जैसे कि के स्थितियों में किया जाता है।

ऐसे स्थितियों में, प्राथमिकता दें .

def parallel_variance(n_a, avg_a, M2_a, n_b, avg_b, M2_b):
    n = n_a + n_b
    delta = avg_b - avg_a
    M2 = M2_a + M2_b + delta**2 * n_a * n_b / n
    var_ab = M2 / (n - 1)
    return var_ab

इसे AVX, GPU और कंप्यूटर क्लस्टर के साथ समानांतरीकरण और सहप्रसरण की अनुमति देने के लिए सामान्यीकृत किया जा सकता है[3]

उदाहरण

मान लें कि सभी फ़्लोटिंग पॉइंट परिचालन मानक IEEE 754 डबल-प्रिसिजन 64 बिट IEEE 754 डबल-प्रिसिजन अंकगणित का उपयोग करते हैं। अनंत जनसंख्या से प्रतिरूप (4, 7, 13, 16) पर विचार करें। इस प्रतिरूप के आधार पर, अनुमानित जनसंख्या माध्य 10 है, और जनसंख्या भिन्नता का निष्पक्ष अनुमान 30 है। अनुभवहीन कलन विधि और दो-पास कलन विधि दोनों इन मूल्यों की सही गणना करते हैं।

आगे प्रतिरूप पर विचार करें (108 + 4, 108 + 7, 108 + 13, 108 + 16), जो पहले प्रतिरूप के समान अनुमानित भिन्नता को उत्पन्न करता है। दो-पास कलन विधि इस विचरण अनुमान की सही गणना करता है, परंतु अनुभवहीन कलन विधि 30 के अतिरिक्त 29.33333333333332 इन मानों की सही गणना करता है।

यद्यपि परिशुद्धता की यह हानि सहनीय हो सकती है और इस अनुभवहीन कलन विधि की एक छोटी सी कमी के रूप में देखा जा सकता है, परंतु बंदसमुच्चय को और बढ़ाने से त्रुटि भयावह हो जाती है। (109 + 4, 109 + 7, 109 + 13, 109 + 16) प्रतिरूप पर विचार करें. पुनः 30 की अनुमानित जनसंख्या भिन्नता की गणना दो-पास कलन विधि द्वारा सही ढंग से की जाती है, परंतु अनुभवहीन कलन विधि अब इसे −170.666666666666666 के रूप में गणना करता है। यह अनुभवहीन कलन विधि के साथ एक गंभीर समस्या है और कलन विधि के अंतिम चरण में दो समान संख्याओं के घटाव में भयावह निरस्तीकरण के कारण है।

उच्च-क्रम आँकड़े

टेरीबेरी ने चान के सूत्रों को विस्तार किया है जिससे तीसरे और चौथे केंद्रीय क्षणों की गणना की जा सके, जो उदाहरण के लिए त्रिकोणीयता और कुर्तोसिस की अनुमानित गणना में उपयोगी होते हैं।:[11]

यहां पुनः माध्य से अंतर की शक्तियों का योग है यदि

वृद्धिशील स्थितियों के लिए (अर्थात्, ), इससे यह सरल हो जाता है:

मूल्य को संरक्षित करके , केवल एक डिवीजन परिचालन की आवश्यकता है और उच्च-क्रम के आँकड़ों की गणना थोड़ी वृद्धिशील लागत के लिए की जा सकती है।

जैसा कि वर्णित है, कर्टोसिस के लिए लागू ऑनलाइन कलन विधिका एक उदाहरण है:

def online_kurtosis(data):
    n = mean = M2 = M3 = M4 = 0

    for x in data:
        n1 = n
        n = n + 1
        delta = x - mean
        delta_n = delta / n
        delta_n2 = delta_n**2
        term1 = delta * delta_n * n1
        mean = mean + delta_n
        M4 = M4 + term1 * delta_n2 * (n**2 - 3*n + 3) + 6 * delta_n2 * M2 - 4 * delta_n * M3
        M3 = M3 + term1 * delta_n * (n - 2) - 3 * delta_n * M2
        M2 = M2 + term1

    # Note, you may also calculate variance using M2, and skewness using M3
    # Caution: If all the inputs are the same, M2 will be 0, resulting in a division by 0.
    kurtosis = (n * M4) / (M2**2) - 3
    return kurtosis

पेबे ने इन परिणामों को और विस्तारित किया है जो किसी भी अनुक्रम के केंद्रीय क्षणों के लिए उपयुक्त होते हैं,[12] इन्क्रीमेंटल और पेयरवाई केस में, और इसके बाद पेबे एट एल ने भारित और मिश्रण केंद्रीय क्षणों के लिए विस्तार किया। वहाँ सहप्रसरण के समान सूत्र भी मिल सकते हैं।[13]चोई और स्वीटमैन[14] वैषम्य और कुर्टोसिस की गणना करने के लिए दो वैकल्पिक विधियों को प्रस्तुत किया जा सकता है, जिनमें से प्रत्येक कुछ अनुप्रयोगों में पर्याप्त कंप्यूटर मेमोरी आवश्यकताओं और सीपीयू समय को बचा सकता है। पहला दृष्टिकोण डेटा को बिन में अलग करके सांख्यिकीय क्षणों की गणना करना है और फिर परिणामी हिस्टोग्राम की ज्यामिति से क्षणों की गणना करना है, जो प्रभावी रूप से उच्च क्षणों के लिए एक-पास कलन विधि बन जाता है। एक लाभ यह है कि सांख्यिकीय क्षण की गणना यादृच्छिक सटीकता के साथ किया जा सकता है, जिससे गणना को सटीकता के साथ ट्यून किया जा सकता है, उदाहरण के लिए, डेटा भंडारण प्रारूप या मूल माप हार्डवेयर। एक यादृच्छिक चर का एक सापेक्ष हिस्टोग्राम पारंपरिक विधियों से बनाया जा सकता है: संभावित मूल्यों की सीमा को बिन में विभाजित किया जाता है और प्रत्येक बिन के भीतर घटनाओं की संख्या को गिना और प्लॉट किया जाता है जिससे प्रत्येक आयत का क्षेत्र उस बिन के भीतर प्रतिरूप मूल्यों के भागों के बराबर हो:

यहाँ और बिन पर आवृत्ति और सापेक्ष आवृत्ति का प्रतिनिधित्व करें और हिस्टोग्राम का कुल क्षेत्रफल है. इस सामान्यीकरण के बाद, क्षण और केंद्रीय क्षण सापेक्ष हिस्टोग्राम से गणना की जा सकती है:

जहां सुपरस्क्रिप्ट इंगित करता है कि क्षणों की गणना हिस्टोग्राम से की जाती है। निरंतर बिन चौड़ाई के लिए इन दो अभिव्यक्तियों का उपयोग करके को सरल बनाया जा सकता है :

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

यदि सांख्यिकीय क्षणों के समुच्चय के लिए , ज्ञात हैं फिर प्रत्येक को समतुल्य के रूप में व्यक्त किया जा सकता है :

यहाँ सामान्यतः की अवधि के रूप में लिया जाता है समय-इतिहास, या अंकों की संख्या यदि स्थिर है.

सांख्यिकीय क्षणों को के रूप में व्यक्त करने का लाभ है और समुच्चय को छोड़कर जोड़ा जा सकता है, और इसके मूल्य पर कोई ऊपरी सीमा नहीं है

जहां सबस्क्रिप्ट संघटित समय-इतिहास या संयुक्त का प्रतिनिधित्व करता है . ये संयुक्त मूल्य हैं फिर इसे पूर्ण रूप से संयोजित समय-इतिहास का प्रतिनिधित्व करने वाले कच्चे क्षणों में उलटा रूपांतरित किया जा सकता है

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


सहप्रसरण

सहप्रसरण की गणना के लिए बहुत समान कलन विधिका उपयोग किया जा सकता है।

अनुभवहीन कलन विधि

अनुभवहीन कलन विधि है

उपरोक्त कलन विधिके लिए, कोई निम्नलिखित पायथन कोड का उपयोग कर सकता है:

def naive_covariance(data1, data2):
    n = len(data1)
    sum1 = sum(data1)
    sum2 = sum(data2)
    sum12 = sum([i1 * i2 for i1, i2 in zip(data1, data2)])

    covariance = (sum12 - sum1 * sum2 / n) / n
    return covariance


माध्य के अनुमान के साथ

विचरण के लिए, दो यादृच्छिक चर का सहप्रसरण भी शिफ्ट-अपरिवर्तनीय है, इसलिए कोई भी दो स्थिर मान दिए गए हैं और इसे लिखा जा सकता है:

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

def shifted_data_covariance(data_x, data_y):
    n = len(data_x)
    if n < 2:
        return 0
    kx = data_x[0]
    ky = data_y[0]
    Ex = Ey = Exy = 0
    for ix, iy in zip(data_x, data_y):
        Ex += ix - kx
        Ey += iy - ky
        Exy += (ix - kx) * (iy - ky)
    return (Exy - Ex * Ey / n) / n


दो-पास

दो-पास कलन विधि पहले प्रतिरूप माध्य की गणना करता है, और फिर सहप्रसरण की:

दो-पास कलन विधि को इस प्रकार लिखा जा सकता है:

def two_pass_covariance(data1, data2):
    n = len(data1)
    mean1 = sum(data1) / n
    mean2 = sum(data2) / n

    covariance = 0
    for i1, i2 in zip(data1, data2):
        a = i1 - mean1
        b = i2 - mean2
        covariance += a * b / n
    return covariance

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

ऑनलाइन

एक स्थिर वन-पास कलन विधिमौजूद है, जो विचरण की गणना के लिए ऑनलाइन कलन विधिके समान है, जो सह-पल की गणना करता है :

उस अंतिम समीकरण में स्पष्ट विषमता इस तथ्य के कारण है , इसलिए दोनों अद्यतन शर्तें समान हैं . पहले साधनों की गणना करके, फिर अवशेषों पर स्थिर वन-पास कलन विधिका उपयोग करके और भी अधिक सटीकता प्राप्त की जा सकती है।

इस प्रकार सहप्रसरण की गणना इस प्रकार की जा सकती है

def online_covariance(data1, data2):
    meanx = meany = C = n = 0
    for x, y in zip(data1, data2):
        n += 1
        dx = x - meanx
        meanx += dx / n
        meany += (y - meany) / n
        C += dx * (y - meany)

    population_covar = C / n
    # Bessel's correction for sample variance
    sample_covar = C / (n - 1)

भारित सहप्रसरण की गणना के लिए एक छोटा संशोधन भी किया जा सकता है:

def online_weighted_covariance(data1, data2, data3):
    meanx = meany = 0
    wsum = wsum2 = 0
    C = 0
    for x, y, w in zip(data1, data2, data3):
        wsum += w
        wsum2 += w * w
        dx = x - meanx
        meanx += (w / wsum) * dx
        meany += (w / wsum) * (y - meany)
        C += w * dx * (y - meany)

    population_covar = C / wsum
    # Bessel's correction for sample variance
    # Frequency weights
    sample_frequency_covar = C / (wsum - 1)
    # Reliability weights
    sample_reliability_covar = C / (wsum - wsum2 / wsum)

इसी तरह, दो समुच्चय ों के सहप्रसरणों को संयोजित करने का एक सूत्र है जिसका उपयोग गणना को समानांतर करने के लिए किया जा सकता है:[3]


भारित बैच संस्करण

भारित ऑनलाइन कलन विधि का एक संस्करण जो बैच अद्यतन करता है वह भी उपस्थित है: प्रायः भार दर्शाएं और लिखें

इसके बाद सहप्रसरण की गणना इस प्रकार की जा सकती है


यह भी देखें

संदर्भ

  1. 1.0 1.1 Einarsson, Bo (2005). वैज्ञानिक कंप्यूटिंग में सटीकता और विश्वसनीयता. SIAM. p. 47. ISBN 978-0-89871-584-2.
  2. 2.0 2.1 2.2 Chan, Tony F.; Golub, Gene H.; LeVeque, Randall J. (1983). "Algorithms for computing the sample variance: Analysis and recommendations" (PDF). The American Statistician. 37 (3): 242–247. doi:10.1080/00031305.1983.10483115. JSTOR 2683386. Archived (PDF) from the original on 2022-10-09.
  3. 3.0 3.1 3.2 Schubert, Erich; Gertz, Michael (2018-07-09). (सह-)विचरण की संख्यात्मक रूप से स्थिर समानांतर गणना. ACM. p. 10. doi:10.1145/3221269.3223036. ISBN 9781450365055. S2CID 49665540.
  4. Higham, Nicholas (2002). Accuracy and Stability of Numerical Algorithms (2 ed) (Problem 1.10). SIAM.
  5. Welford, B. P. (1962). "वर्गों और उत्पादों के सही योग की गणना करने की विधि पर ध्यान दें". Technometrics. 4 (3): 419–420. doi:10.2307/1266577. JSTOR 1266577.
  6. Donald E. Knuth (1998). The Art of Computer Programming, volume 2: Seminumerical Algorithms, 3rd edn., p. 232. Boston: Addison-Wesley.
  7. Ling, Robert F. (1974). "नमूना साधनों और भिन्नताओं की गणना के लिए कई एल्गोरिदम की तुलना". Journal of the American Statistical Association. 69 (348): 859–866. doi:10.2307/2286154. JSTOR 2286154.
  8. "Accurately computing sample variance online".
  9. West, D. H. D. (1979). "Updating Mean and Variance Estimates: An Improved Method". Communications of the ACM. 22 (9): 532–535. doi:10.1145/359146.359153. S2CID 30671293.
  10. Chan, Tony F.; Golub, Gene H.; LeVeque, Randall J. (1979), "Updating Formulae and a Pairwise Algorithm for Computing Sample Variances." (PDF), Technical Report STAN-CS-79-773, Department of Computer Science, Stanford University.
  11. Terriberry, Timothy B. (2007), Computing Higher-Order Moments Online, archived from the original on 23 April 2014, retrieved 5 May 2008
  12. Pébaÿ, Philippe; Terriberry, Timothy; Kolla, Hemanth; Bennett, Janine (2016), "Numerically Stable, Scalable Formulas for Parallel and Online Computation of Higher-Order Multivariate Central Moments with Arbitrary Weights", Computational Statistics, Springer, 31 (4): 1305–1325, doi:10.1007/s00180-015-0637-z, S2CID 124570169
  13. Pébaÿ, Philippe (2008), "Formulas for Robust, One-Pass Parallel Computation of Covariances and Arbitrary-Order Statistical Moments" (PDF), Technical Report SAND2008-6212, Sandia National Laboratories, archived (PDF) from the original on 2022-10-09[permanent dead link]
  14. 14.0 14.1 Choi, Myoungkeun; Sweetman, Bert (2010), "Efficient Calculation of Statistical Moments for Structural Health Monitoring", Journal of Structural Health Monitoring, 9 (1): 13–24, doi:10.1177/1475921709341014, S2CID 17534100


बाहरी संबंध