ตั้งค่า Seed ก่อนโค้ดบล็อกหรือหนึ่งครั้งต่อโปรเจ็กต์หรือไม่


13

มันเป็นคำแนะนำมาตรฐานในการตั้งค่าเมล็ดสุ่มเพื่อให้ผลลัพธ์สามารถทำซ้ำได้ อย่างไรก็ตามเนื่องจากเมล็ดมีความก้าวหน้าเนื่องจากมีการสุ่มจับหมายเลขหลอกผลลัพธ์อาจมีการเปลี่ยนแปลงหากมีส่วนใดของรหัสดึงหมายเลขเพิ่มเติม

เมื่อมองแวบแรกการควบคุมเวอร์ชันดูเหมือนจะเป็นทางออกสำหรับเรื่องนี้เพราะอย่างน้อยมันจะช่วยให้คุณย้อนกลับไปทำซ้ำรุ่นที่มีอยู่เมื่อคุณจดบันทึกผลลัพธ์ลงในบันทึกหรือกระดาษ อย่างไรก็ตามเนื่องจากใช้เวลาเพียงหนึ่งครั้งในการทำสิ่งต่าง ๆ หากคุณอัปเดต R ผลลัพธ์อาจเปลี่ยนแปลงได้เช่นกัน

ฉันรู้ว่านี่อาจเป็นเพียงปัญหาในบางกรณี แต่ฉันอยากรู้ว่ามีวิธีปฏิบัติที่ดีที่สุดที่นี่หรือไม่ นี่คือสิ่งที่ฉันดิ้นรนในการทำงานของตัวเอง

คำตอบ:


8

ขึ้นอยู่กับว่าคุณจะเรียกใช้รหัสอย่างไรหรือหากมีรหัสใด ๆ ที่ค่อนข้างสุ่มในการที่จะดึงตัวเลขสุ่มด้วยวิธีการสุ่ม (ตัวอย่างนี้คือการทดสอบการเปลี่ยนรูปในแพคเกจวีแก้นของเราที่เราจะทำการอนุญาตต่อไปจนกว่าเราจะรวบรวมข้อมูลเพียงพอที่จะทราบว่าผลลัพธ์นั้นแตกต่างจากข้อผิดพลาด Type I ที่ระบุไว้ในบัญชี ไม่ควรส่งผลกระทบต่อการจับ ...

หากสคริปต์สุดท้ายจะถูกเรียกใช้เป็นงานแบ็ตช์หรือทั้งหมดและไม่มีการสุ่มสุ่มจากตัวสร้างตัวเลขแบบหลอกหลอกมันปลอดภัยที่จะตั้งค่าเมล็ดที่ด้านบนสุดของสคริปต์และรันสคริปต์ทั้งหมด .

หากคุณต้องการทีละขั้นตอนบล็อกอาจเรียกใช้ซ้ำแล้วคุณต้องมีการset.seed()โทรก่อนที่จะเรียกแต่ละฟังก์ชั่นที่จะดึงจากตัวสร้างตัวเลขสุ่มหลอก

สำหรับเอกสารทางวิทยาศาสตร์ของฉันฉันมักจะได้รับการป้องกันที่ยอดเยี่ยมและตั้งค่าเมล็ดก่อนรหัสแต่ละอัน; การทำเช่นนี้ช่วยให้สามารถอัปเดตสคริปต์ในภายหลังซึ่งอาจจำเป็นต้องแทรกลงในสคริปต์ที่มีอยู่ ณ จุดใดก็ได้ - พูดเพื่อตอบสนองต่อความคิดเห็นของผู้ตรวจสอบหรือผู้เขียนร่วม

หวังว่าผลลัพธ์ของคุณจะไม่เกิดขึ้นกับค่าสุ่ม pseduo ชุดใดชุดหนึ่งดังนั้นปัญหาจะสามารถทำซ้ำค่าที่แน่นอนที่ระบุไว้ในรายงานหรือรายงาน แม้ว่าคุณอาจจะมีการป้องกันที่ยอดเยี่ยมและตั้งค่าเมล็ดบนโค้ดแต่ละอันคุณยังอาจจำเป็นต้องสร้างการติดตั้งที่แน่นอน --- รุ่น R และเวอร์ชันแพคเกจเพื่อบันทึกรายละเอียดเหล่านั้นเป็นสิ่งจำเป็น เพื่อความปลอดภัยเป็นพิเศษคุณจะต้องเก็บรุ่น R และแพ็คเกจก่อนหน้านี้ไว้สำหรับโครงการ / เอกสารเฉพาะ แน่นอนว่าหลายคนทำเช่นนี้


+1 ดูย่อหน้าสุดท้าย: คุณไม่จำเป็นต้องบันทึกขยะทั้งหมดและไม่ต้องสร้างการติดตั้งใหม่ทั้งหมด หากคุณเฉพาะเกี่ยวกับ RNG ที่คุณใช้แทนที่จะยอมรับค่าเริ่มต้นสิ่งที่ต้องบันทึกคือ (1) ซอร์สโค้ดสำหรับ RNG นั้น (ซึ่งมักจะสั้น) และ (2) สถานะของ RNG ในแต่ละช่วงหัวเลี้ยวหัวต่อสำคัญ . มากที่สุดในการทำงานของรัฐนี้สามารถพบได้ในR .Random.seedความกังวลที่ยิ่งใหญ่ที่สุดของฉันRคือว่ากิจวัตรบางอย่างอาจหลีกเลี่ยงสิ่งนี้ - และอาจเพิกเฉยset.seedในบางกรณี
whuber

2
@ เมื่อฉันคิดโดยทั่วไปที่นั่น - หากความกังวลกำลังทำซ้ำชุดผลลัพธ์ที่แน่นอนคุณจะต้องใช้เวอร์ชัน R และเวอร์ชันของแพ็คเกจที่ใช้ ถึงเล็กน้อย R 3.0.0 เปลี่ยนความแม่นยำที่รายงานค่า - ไม่สำคัญ แต่ก็เพียงพอที่จะทดสอบการตรวจสอบแพคเกจทั้งหมดที่ถือว่ามีความแม่นยำมากเกินไป นอกจากนี้แพ็คเกจยังได้รับการอัปเดตเป็นประจำและการเปลี่ยนแปลงต่างๆ
Gavin Simpson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.