प्रत्येक कोड ब्लॉक से पहले या परियोजना के अनुसार एक बार बीज सेट करें?


13

यादृच्छिक बीज सेट करने के लिए यह मानक सलाह है ताकि परिणाम पुन: पेश किए जा सकें। हालाँकि, चूंकि बीज छद्म-यादृच्छिक संख्याओं के रूप में उन्नत है, इसलिए यदि कोड का कोई टुकड़ा अतिरिक्त संख्या खींचता है तो परिणाम बदल सकते हैं ।

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

मुझे पता है कि यह शायद ही दुर्लभ मामलों में समस्याग्रस्त है, लेकिन मैं उत्सुक हूं अगर यहां कोई सर्वोत्तम प्रथाएं हैं। यह कुछ ऐसा है जिसे मैं अपने काम में संघर्ष कर रहा हूं।

जवाबों:


8

यह निर्भर करता है कि आप कोड को कैसे चलाएंगे या यदि कोई कोड है जो कुछ हद तक स्टोचस्टिक है जिसमें यह यादृच्छिक तरीके से यादृच्छिक संख्या खींचता है। (इसका एक उदाहरण हमारे शाकाहारी पैकेज में क्रमपरिवर्तन परीक्षण है जहां हम केवल तब तक अनुमति देना जारी रखते हैं जब तक कि हमें यह जानने के लिए पर्याप्त डेटा प्राप्त नहीं हो जाता है कि क्या परिणाम प्रकार I त्रुटि से भिन्न है जो टाइप II त्रुटि दर से निपट रहा है।) हालांकि ड्रॉ को प्रभावित नहीं करना चाहिए ...

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

यदि आप कोड के माध्यम से कदम रखना चाहते हैं, तो शायद फिर से गतिशील ब्लॉक तो आपको set.seed()प्रत्येक फ़ंक्शन कॉल से पहले एक कॉल की आवश्यकता होगी जो कि छद्म यादृच्छिक संख्या जनरेटर से आकर्षित होगा।

अपने वैज्ञानिक पत्रों के लिए, मैं नियमित रूप से सुपर रक्षात्मक जाता हूं और प्रत्येक कोड चंक से पहले बीज सेट करता हूं; यह बाद की तारीख में स्क्रिप्ट को अपडेट करने की अनुमति देता है जिसे किसी भी बिंदु पर मौजूदा स्क्रिप्ट में डालने की आवश्यकता हो सकती है - समीक्षकों की टिप्पणियों या सह-लेखकों की टिप्पणियों का जवाब देने के लिए कहें।

आपके परिणाम निश्चित रूप से विशेष रूप से pseduo- यादृच्छिक मूल्यों के सेट पर आकस्मिक नहीं होंगे, इसलिए यह मुद्दा किसी रिपोर्ट या पेपर में बताए गए सटीक मानों को पुन: पेश करने में सक्षम हो रहा है। भले ही आप सुपर डिफेंसिव हों और प्रत्येक कोड चंक पर एक बीज सेट करें, फिर भी आपको सटीक इंस्टॉलेशन को फिर से बनाने की आवश्यकता हो सकती है --- आर संस्करण और पैकेज संस्करण ताकि उन विवरणों को रिकॉर्ड करना आवश्यक हो। अतिरिक्त सुरक्षित रहने के लिए आपको विशिष्ट प्रोजेक्ट्स / पेपर्स के लिए पिछले आर संस्करणों और पैकेजों को अपने पास रखना होगा। दरअसल, बहुत से लोग ऐसा करते हैं।


+1। अंतिम पैराग्राफ फिर से जमा करें: आपको उस सभी रद्दी को सहेजना नहीं है और आपको पूरी स्थापना को फिर से बनाना नहीं है। यदि आप विशिष्ट हैं, जिसके बारे में आप RNG का उपयोग करते हैं, तो चूक को स्वीकार करने के बजाय, उन सभी को सहेजने की आवश्यकता है (1) उस RNG के लिए स्रोत कोड (जो आमतौर पर कम है) और (2) प्रत्येक महत्वपूर्ण मोड़ पर RNG की स्थिति । ज्यादातर Rकाम के लिए यह राज्य में पाया जा सकता है .Random.seed। इस बारे Rमें मेरी सबसे बड़ी चिंता यह है कि कुछ रूटीन इसे दरकिनार कर सकते set.seedहैं - और शायद कुछ मामलों में पूरी तरह से अनदेखा कर सकते हैं।
whuber

2
@ जब मैं आम तौर पर वहां और अधिक सोच रहा था - यदि परिणाम परिणामों के सटीक सेट को पुन: पेश कर रहा है तो आप आर के संस्करण और उपयोग किए गए किसी भी पैकेज के संस्करणों की आवश्यकता से अधिक होंगे। सफेद करने के लिए; 3.0.0 ने सटीकता को बदल दिया, जिसके साथ यह मूल्यों की सूचना देता है - प्रमुख नहीं, लेकिन यह सभी कई पैकेज चेक परीक्षणों को फेंकने के लिए पर्याप्त था जो बहुत सटीक मान रहे थे। इसके अलावा, पैकेज नियमित रूप से अपडेट किए जाते हैं और चीजें बदल जाती हैं।
गेविन सिम्पसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.