2011-01-01 10 views
11

से एक ही इनपुट के लिए अलग मानक विचलन मैं वर्तमान में पाइथन में जावा में लिखे गए कुछ एल्गोरिदम को पुन: कार्यान्वित करने पर काम कर रहा हूं। एक कदम मूल्यों की सूची के मानक विचलन की गणना करना है। इसके लिए अपाचे मैथ 1.1 लाइब्रेरी से मूल कार्यान्वयन DescriptiveStatistics.getStandardDeviation का उपयोग करता है। मैं numpy 1.5 के मानक विचलन का उपयोग करें। समस्या यह है कि वे एक ही इनपुट के लिए (बहुत) अलग-अलग परिणाम देते हैं।वोल्फ्राम और numpy

[0.113967640255, 0.223095775796, 0.283134228235, 0.416793887842] 

मैं निम्नलिखित परिणाम प्राप्त:

numpy   : 0.10932134388775223 
Apache Math 1.1 : 0.12620366805397404 
Wolfram Alpha : 0.12620366805397404 

मैं एक तिहाई राय प्राप्त करने के Wolfram Alpha के साथ की जाँच नमूना मैं यह है। मुझे नहीं लगता कि इस तरह के अंतर को अकेले परिशुद्धता द्वारा समझाया जा सकता है। क्या किसी को कोई विचार है कि यह क्यों हो रहा है, और मैं इसके बारे में क्या कर सकता हूं?

संपादित: इसके अलावा

>>> from math import sqrt 
>>> v = [0.113967640255, 0.223095775796, 0.283134228235, 0.416793887842] 
>>> mu = sum(v)/4 
>>> sqrt(sum([(x - mu)**2 for x in v])/4) 
0.10932134388775223 

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

>>> from numpy import std 
>>> std([0.113967640255, 0.223095775796, 0.283134228235, 0.416793887842]) 
0.10932134388775223 
+0

ठीक है, मैं आपको बता सकता हूं कि अपाचे और वोल्फ्राम सही हैं? और यह असंभव है कि नम्पी गलत है। तो आप शायद इसे सही इस्तेमाल नहीं कर रहे हैं। पोस्ट कोड? –

उत्तर

23

अपाचे और Wolfram द्वारा विभाजित N-1 के बजाय एन। यह स्वतंत्रता समायोजन की एक डिग्री है, क्योंकि आप μ का अनुमान लगाते हैं। एन -1 द्वारा विभाजित करके आप जनसंख्या मानक विचलन का निष्पक्ष अनुमान प्राप्त करते हैं। आप ddof विकल्प का उपयोग कर न्यूपी के व्यवहार को बदल सकते हैं।

यह NumPy दस्तावेज में वर्णित है:

औसत चुकता विचलन सामान्य रूप से x.sum रूप में गणना की है()/एन, जहां एन = लेन (एक्स)। यदि, हालांकि, डीडीओफ़ निर्दिष्ट है, तो विभाजक एन-डीडीओफ़ इसके बजाए उपयोग किया जाता है। मानक सांख्यिकीय अभ्यास में, ddof = 1 अनंत आबादी के भिन्नता का अनुमानित प्रदान करता है। ddof = 0 भिन्नता अनुमानित चर के लिए भिन्नता अनुमान का अधिकतम अनुमान अनुमान प्रदान करता है। इस विवेक में गणना की गई मानक विचलन अनुमानित भिन्नता, का वर्ग रूट है, इसलिए ddof = 1 के साथ भी, यह मानक विचलन प्रति से निष्पक्ष अनुमान नहीं होगा।

+2

आपको पता नहीं है कि आपका जवाब मुझे कितना खुश करता है। धन्यवाद! –

+2

आप वुल्फ्राम | अल्फा से "आबादी मानक विचलन" के लिए पूछ सकते हैं क्योंकि NumPy ने वही जवाब प्राप्त किया था। – Soumya