विचरण की गणना के लिए एल्गोरिदम: Difference between revisions
(→उदाहरण) |
|||
Line 199: | Line 199: | ||
==उच्च-क्रम आँकड़े== | ==उच्च-क्रम आँकड़े== | ||
टेरीबेरी<ref>{{Citation | टेरीबेरी ने चान के सूत्रों को विस्तार किया है जिससे तीसरे और चौथे केंद्रीय क्षणों की गणना की जा सके, जो उदाहरण के लिए त्रिकोणीयता और कुर्तोसिस की अनुमानित गणना में उपयोगी होते हैं।:<ref>{{Citation | ||
| last=Terriberry | | last=Terriberry | ||
| first=Timothy B. | | first=Timothy B. | ||
Line 209: | 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 216: | 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>M_k</math> पुनः माध्य से अंतर की शक्तियों का योग<math display="inline">\sum(x - \overline{x})^k</math> है यदि | ||
: <math> | : <math> | ||
\begin{align} | \begin{align} | ||
Line 223: | Line 223: | ||
\end{align} | \end{align} | ||
</math> | </math> | ||
वृद्धिशील | वृद्धिशील स्थितियों के लिए (अर्थात्, <math>B = \{x\}</math>), इससे यह सरल हो जाता है: | ||
: <math> | : <math> | ||
\begin{align} | \begin{align} | ||
Line 235: | Line 235: | ||
मूल्य को संरक्षित करके <math>\delta / n</math>, केवल एक डिवीजन परिचालन की आवश्यकता है और उच्च-क्रम के आँकड़ों की गणना थोड़ी वृद्धिशील लागत के लिए की जा सकती है। | मूल्य को संरक्षित करके <math>\delta / n</math>, केवल एक डिवीजन परिचालन की आवश्यकता है और उच्च-क्रम के आँकड़ों की गणना थोड़ी वृद्धिशील लागत के लिए की जा सकती है। | ||
जैसा कि वर्णित है, कर्टोसिस के लिए लागू ऑनलाइन | जैसा कि वर्णित है, कर्टोसिस के लिए लागू ऑनलाइन कलन विधिका एक उदाहरण है: | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
def online_kurtosis(data): | def online_kurtosis(data): | ||
Line 257: | Line 257: | ||
return kurtosis | return kurtosis | ||
</syntaxhighlight> | </syntaxhighlight> | ||
पेबे | पेबे ने इन परिणामों को और विस्तारित किया है जो किसी भी अनुक्रम के केंद्रीय क्षणों के लिए उपयुक्त होते हैं,<ref>{{Citation | ||
| last1=Pébaÿ | | last1=Pébaÿ | ||
| first1=Philippe | | first1=Philippe | ||
Line 285: | 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 301: | 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> | : <math> | ||
Line 315: | 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>^{(h)}</math> इंगित करता है कि क्षणों की गणना हिस्टोग्राम से की जाती है। निरंतर बिन चौड़ाई के लिए <math>\Delta x_k=\Delta x</math> इन दो अभिव्यक्तियों का उपयोग करके <math>I= A/\Delta x</math> को सरल बनाया जा सकता है : | ||
: <math> | : <math> | ||
Line 323: | 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>(\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> | : <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</math> है | सांख्यिकीय क्षणों को के रूप में व्यक्त करने का लाभ <math>\gamma</math> है और <math>Q</math> समुच्चय को छोड़कर जोड़ा जा सकता है, और इसके मूल्य <math>Q</math> पर कोई ऊपरी सीमा नहीं है | ||
: <math> | : <math> | ||
Line 345: | 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 480: | Line 472: | ||
===भारित बैच संस्करण=== | ===भारित बैच संस्करण=== | ||
भारित ऑनलाइन कलन विधि का एक संस्करण जो बैच अद्यतन करता है वह भी | भारित ऑनलाइन कलन विधि का एक संस्करण जो बैच अद्यतन करता है वह भी उपस्थित है: प्रायः <math>w_1, \dots w_N</math>भार दर्शाएं और लिखें | ||
:<math>\begin{alignat}{2} | :<math>\begin{alignat}{2} |
Revision as of 12:55, 31 July 2023
विचरण की गणना के लिए कलन विधि संगणनात्मक सांख्यिकी में एक प्रमुख भूमिका निभाते हैं। इस समस्या के लिए अच्छे कलन विधि के प्रतिरूप में एक महत्वपूर्ण कठिनाई यह है कि विचरण के सूत्रों में वर्गों का योग सम्मिलित हो सकता है, जिससे बड़े मूल्यों से निपटने के समय संख्यात्मक अस्थिरता के साथ-साथ अंकगणितीय अतिप्रवाह भी हो सकता है।
अनुभवहीन कलन विधि
आकार N की संपूर्ण सांख्यिकीय जनसंख्या के विचरण की गणना के लिए एक सूत्र है:
n अवलोकनों के एक सीमित सांख्यिकीय प्रतिरूप से जनसंख्या भिन्नता के अनुमानक पूर्वाग्रह अनुमान की गणना करने के लिए बेसेल के सुधार का उपयोग करते हुए, सूत्र है:
इसलिए, अनुमानित विचरण की गणना करने के लिए एक सरल कलन विधि निम्नलिखित द्वारा दिया गया है:
- Let n ← 0, Sum ← 0, SumSq ← 0
- For each datum x:
- n ← n + 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.0 1.1 Einarsson, Bo (2005). वैज्ञानिक कंप्यूटिंग में सटीकता और विश्वसनीयता. SIAM. p. 47. ISBN 978-0-89871-584-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.0 3.1 3.2 Schubert, Erich; Gertz, Michael (2018-07-09). (सह-)विचरण की संख्यात्मक रूप से स्थिर समानांतर गणना. ACM. p. 10. doi:10.1145/3221269.3223036. ISBN 9781450365055. S2CID 49665540.
- ↑ Higham, Nicholas (2002). Accuracy and Stability of Numerical Algorithms (2 ed) (Problem 1.10). SIAM.
- ↑ Welford, B. P. (1962). "वर्गों और उत्पादों के सही योग की गणना करने की विधि पर ध्यान दें". Technometrics. 4 (3): 419–420. doi:10.2307/1266577. JSTOR 1266577.
- ↑ Donald E. Knuth (1998). The Art of Computer Programming, volume 2: Seminumerical Algorithms, 3rd edn., p. 232. Boston: Addison-Wesley.
- ↑ Ling, Robert F. (1974). "नमूना साधनों और भिन्नताओं की गणना के लिए कई एल्गोरिदम की तुलना". Journal of the American Statistical Association. 69 (348): 859–866. doi:10.2307/2286154. JSTOR 2286154.
- ↑ "Accurately computing sample variance online".
- ↑ 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.
- ↑ 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.
- ↑ Terriberry, Timothy B. (2007), Computing Higher-Order Moments Online, archived from the original on 23 April 2014, retrieved 5 May 2008
- ↑ 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
- ↑ 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.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