2016-11-23 10 views
10

में सामान्य संख्याएं जब मैंने जूलिया में सामान्य संख्याओं का उपयोग किया तो मेरे डेटा में संख्यात्मक सिमुलेशन एक पैटर्न करते हुए मैंने देखा।i.d.d से संबंधित कैसे हैं। जूलिया

मेरे पास यादृच्छिक matrices का एक समूह है। मेरी गणना पुन: उत्पन्न करने के लिए, मैंने srand फ़ंक्शन प्रति-प्राप्ति सेट की है। यही है, हर बार जब मैं randn(n,n) फ़ंक्शन का उपयोग करता हूं, तो मैं इसे srand(j) से प्रारंभ करता हूं, जहां j प्राप्ति की संख्या है।

मैं जानना चाहता हूं कि सामान्य संख्याएं कैसे उत्पन्न होती हैं, और यदि इसका अर्थ यह है कि मैं जो कर रहा हूं, मैं आकस्मिक सहसंबंध प्रस्तुत करता हूं।

उत्तर

15

आदर्श रूप से, बिलकुल नहीं। यदि आपके पास कोई counterexamples है, तो कृपया उन्हें जूलिया issue tracker पर बग के रूप में दर्ज करें। जूलिया अत्याधुनिक मेर्सन ट्विस्टर लाइब्रेरी का उपयोग करता है, dSFMT। यह पुस्तकालय बहुत तेज़ है और छद्म-यादृच्छिक संख्या पीढ़ी के लिए सर्वोत्तम प्रथाओं का उपयोग करने के लिए माना जाता है। हालांकि, हाल ही में come to my attention है कि सामान्य रूप से एमटी जैसे पीआरएनजी के साथ सूक्ष्म सांख्यिकीय मुद्दे हो सकते हैं - विशेष रूप से छोटे, लगातार बीज मूल्यों का उपयोग करते हुए। इस कम करने के लिए यदि आप संभावित सहसंबंध के बारे में वास्तव में चिंतित हैं, तो आप इस तरह कुछ कर सकता है:

julia> using SHA 

julia> srand(reinterpret(UInt32,sha256(string(1)))) 
MersenneTwister(UInt32[0x73b2866b,0xe1fc34ff,0x4e806b9d,0x573f5aff,0xeaa4ad47,0x491d2fa2,0xdd521ec0,0x4b5b87b7],Base.dSFMT.DSFMT_state(Int32[660235548,1072895699,-1083634456,1073365654,-576407846,1073066249,1877594582,1072764549,-1511149919,1073191776 … -710638738,1073480641,-1040936331,1072742443,103117571,389938639,-499807753,414063872,382,0]),[1.5382,1.36616,1.06752,1.17428,1.93809,1.63529,1.74182,1.30015,1.54163,1.05408 … 1.67649,1.66725,1.62193,1.26964,1.37521,1.42057,1.79071,1.17269,1.37336,1.99576],382) 

julia> srand(reinterpret(UInt32,sha256(string(2)))) 
MersenneTwister(UInt32[0x3a5e73d4,0xee165e26,0x71593fe0,0x035d9b8b,0xd8079c01,0x901fc5b6,0x6e663ada,0x35ab13ec],Base.dSFMT.DSFMT_state(Int32[-1908998566,1072999344,-843508968,1073279250,-1560550261,1073676797,1247353488,1073400397,1888738837,1073180516 … -450365168,1073182597,1421589101,1073360711,670806122,388309585,890220451,386049800,382,0]),[1.5382,1.36616,1.06752,1.17428,1.93809,1.63529,1.74182,1.30015,1.54163,1.05408 … 1.67649,1.66725,1.62193,1.26964,1.37521,1.42057,1.79071,1.17269,1.37336,1.99576],382) 

दूसरे शब्दों में, SHA2-256 की तरह एक मजबूत क्रिप्टोग्राफिक हैश का उपयोग कर एक छोटा सा पूर्णांक बीज मूल्य के एक स्ट्रिंग प्रतिनिधित्व हैश , और मेरसेन ट्विस्टर राज्य के बीज के परिणामस्वरूप हैश डेटा का उपयोग करें। ओटोबनी, रिवेस्ट & स्टार्क प्रत्येक यादृच्छिक संख्या पीढ़ी के लिए एक मजबूत क्रिप्टोग्राफ़िक हैश का उपयोग करने का सुझाव देता है, लेकिन यह एक बड़े पैमाने पर मंदी (वर्तमान हार्डवेयर पर) होने जा रहा है और शायद आपके पास एक ऐसा एप्लिकेशन है जो अपूर्ण सांख्यिकीय यादृच्छिकता के प्रति वास्तव में बहुत संवेदनशील है।

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

+0

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

+3

इसके अलावा, यह एक समान संख्या –

+1

से सामान्य भिन्नता उत्पन्न करने के लिए एक ज़िगगुराट एल्गोरिदम (https://en.wikipedia.org/wiki/Ziggurat_algorithm) का उपयोग करता है, निश्चित रूप से, सीधे मुझसे संपर्क करने में संकोच न करें। – StefanKarpinski