เมื่อใดที่ฉัน * ไม่ * ใช้ฟังก์ชัน nlm ของ R สำหรับ MLE


25

ฉันวิ่งข้ามคู่มือแนะนำว่าฉันใช้ nlm ของ R สำหรับการประเมินความเป็นไปได้สูงสุด แต่ไม่มีของพวกเขา (รวมถึงเอกสารประกอบของ R ) ให้คำแนะนำเชิงทฤษฎีมากสำหรับเมื่อใช้หรือไม่ใช้ฟังก์ชัน

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

คำตอบ:


39

มีจำนวนของการปฏิบัติการเพิ่มประสิทธิภาพการใช้งานทั่วไปในฐาน R ว่าฉันรู้คือoptim, nlminb, nlmและconstrOptim(ซึ่งจับเชิงเส้น จำกัด ความไม่เสมอภาคและบริการโทรoptimภายใต้ประทุน) นี่คือบางสิ่งที่คุณอาจต้องการพิจารณาในการเลือกใช้

  • optimสามารถใช้อัลกอริทึมที่แตกต่างกันจำนวนมากรวมถึงการไล่ระดับสีแบบคอนจูเกต, นิวตัน, ควอซีกึ่งนิวตัน, เนลเดอร์มี้ดและการอบแบบจำลอง สองรายการสุดท้ายไม่ต้องการข้อมูลการไล่ระดับสีและอาจมีประโยชน์หากการไล่ระดับสีไม่สามารถใช้ได้หรือไม่สามารถคำนวณได้ (แต่มีแนวโน้มที่จะช้ากว่าและต้องการการปรับพารามิเตอร์เพิ่มเติมตามลำดับ) นอกจากนี้ยังมีตัวเลือกในการส่งคืน Hessian ที่คำนวณได้ซึ่งคุณจะต้องใช้หากคุณต้องการข้อผิดพลาดมาตรฐานพร้อมกับโซลูชันเอง

  • nlminbใช้วิธีกึ่งนิวตันที่เติมช่องเดียวกันเป็นวิธีการในการ"L-BFGS-B" optimจากประสบการณ์ของฉันดูเหมือนว่าจะแข็งแกร่งกว่าoptimที่เป็นไปได้มากกว่าที่จะส่งคืนโซลูชันในกรณีที่มีชายขอบซึ่งoptimจะไม่มาบรรจบกันแม้ว่าจะขึ้นอยู่กับปัญหาก็ตาม มันมีคุณสมบัติที่ดีถ้าคุณให้ฟังก์ชั่นการไล่ระดับสีอย่างชัดเจนในการทำการตรวจสอบตัวเลขของค่าที่โซลูชั่น หากค่าเหล่านี้ไม่ตรงกับค่าที่ได้จากความแตกต่างของตัวเลขnlminbจะมีคำเตือน สิ่งนี้ช่วยให้คุณมั่นใจได้ว่าคุณไม่ได้ทำผิดพลาดในการระบุการไล่ระดับสี (ทำได้ง่ายด้วยโอกาสที่ซับซ้อน)

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


17

เวลาที่จะใช้และไม่ใช้วิธีการใด ๆ ในการเพิ่มประสิทธิภาพสูงสุดนั้นขึ้นอยู่กับประเภทข้อมูลที่คุณมี nlmจะทำงานได้ดีถ้าพื้นผิวที่มีโอกาสไม่ได้เป็น "หยาบ" เป็นพิเศษ nlminbจัดเตรียมวิธีการ จำกัด ค่าพารามิเตอร์ให้กับกล่องขอบเขตเฉพาะ optimซึ่งอาจเป็นเครื่องมือเพิ่มประสิทธิภาพที่ใช้มากที่สุด ตัวอย่างเช่น BFGS, L-BFGS-B และการหลอมจำลอง (ผ่านตัวเลือก SANN) ซึ่งอาจมีประโยชน์หากคุณมีปัญหาในการปรับให้เหมาะสมยาก นอกจากนี้ยังมีตัวเพิ่มประสิทธิภาพจำนวนมากใน CRAN rgenoudตัวอย่างเช่นให้อัลกอริทึมทางพันธุกรรมสำหรับการเพิ่มประสิทธิภาพDEoptimใช้รูทีนการเพิ่มประสิทธิภาพทางพันธุกรรมที่แตกต่างกัน อัลกอริธึมทางพันธุกรรมอาจช้าไปบรรจบกัน แต่โดยปกติจะรับประกันว่าจะมาบรรจบกัน (ในเวลา) แม้ว่าจะมีความไม่ต่อเนื่องในโอกาส ฉันไม่รู้DEoptimแต่rgenoudถูกตั้งค่าให้ใช้snowสำหรับการประมวลผลแบบขนานซึ่งช่วยได้บ้าง

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.