วิธีปรับแต่งการปรับให้เรียบใน mgcv GAM model


14

ฉันพยายามหาวิธีควบคุมพารามิเตอร์การปรับให้เรียบใน mgcv: แบบจำลอง gam

ฉันมีตัวแปรทวินามฉันกำลังพยายามสร้างแบบจำลองเป็นฟังก์ชันหลักของพิกัด x และ y บนกริดคงที่รวมถึงตัวแปรอื่น ๆ ที่มีอิทธิพลน้อยกว่า ในอดีตฉันได้สร้างรูปแบบการถดถอยในท้องถิ่นที่ดีพอสมควรโดยใช้แพ็คเกจ locfit และค่า (x, y)

อย่างไรก็ตามฉันต้องการลองรวมตัวแปรอื่น ๆ เข้ากับโมเดลและดูเหมือนว่าโมเดลเสริมทั่วไป (GAM) มีความเป็นไปได้ที่ดี หลังจากดูแพ็คเกจเกมและ mgcv ซึ่งทั้งสองอย่างมีฟังก์ชั่น GAM ฉันเลือกใช้หลังเนื่องจากมีความคิดเห็นจำนวนมากในเธรดรายการจดหมายดูเหมือนจะแนะนำ ข้อเสียอย่างหนึ่งก็คือดูเหมือนว่ามันจะไม่สนับสนุนการถดถอยในท้องถิ่นอย่างราบรื่นเช่นเหลืองหรือ locfit

ในการเริ่มต้นฉันแค่ต้องการลองทำซ้ำประมาณโมเดล locfit โดยใช้เพียงพิกัด (x, y) ฉันลองด้วยการทำให้ผลิตภัณฑ์เรียบเนียนทั้งปกติและเทนเซอร์:

my.gam.te <- gam(z ~ te(x, y), family=binomial(logit), data=my.data, scale = -1)

my.gam.s  <- gam(z ~  s(x, y), family=binomial(logit), data=my.data, scale = -1)

อย่างไรก็ตามการวางแผนการทำนายจากตัวแบบพวกมันมีความราบรื่นมากกว่าเมื่อเทียบกับตัวแบบ locfit ดังนั้นฉันจึงพยายามปรับแต่งโมเดลให้ไม่เกะกะจนเกินไป ฉันพยายามปรับพารามิเตอร์ sp และ k แต่ก็ไม่ชัดเจนสำหรับฉันว่ามันมีผลต่อการปรับให้เรียบได้อย่างไร ใน locfit พารามิเตอร์ nn จะควบคุมช่วงของพื้นที่ใกล้เคียงที่ใช้ด้วยค่าที่น้อยลงทำให้มีการปรับให้เรียบน้อยลงและ "wiggling" มากขึ้นซึ่งช่วยในการจับภาพบางพื้นที่บนกริดที่ความน่าจะเป็นของผลลัพธ์ทวินามเปลี่ยนไปอย่างรวดเร็ว ฉันจะไปเกี่ยวกับการตั้งค่ารูปแบบเกมเพื่อให้มันทำงานในลักษณะเดียวกันได้อย่างไร

คำตอบ:


23

kโต้แย้งอย่างมีประสิทธิภาพตั้งค่ามิติของเมทริกซ์ที่ราบเรียบสำหรับแต่ละระยะ gam()กำลังใช้คะแนน GCV หรือ UBRE เพื่อเลือกปริมาณความเรียบที่เหมาะสมที่สุด แต่สามารถทำงานได้เฉพาะในมิติของเมทริกซ์การปรับให้เรียบเท่านั้น โดยค่าเริ่มต้นte()smooths มีk = 5^2สำหรับพื้นผิว 2d ฉันลืมสิ่งที่มันเป็นs()เพื่อตรวจสอบเอกสาร คำแนะนำในปัจจุบันจาก Simon Wood ผู้เขียนmgcvคือถ้าระดับความเรียบที่เลือกโดยแบบจำลองอยู่ที่หรือใกล้เคียงกับขีด จำกัด ของมิติที่กำหนดโดยค่าที่ใช้สำหรับkคุณควรเพิ่มkและปรับรูปแบบใหม่เพื่อดูว่า เลือกรุ่นที่ซับซ้อนมากขึ้นจากเมทริกซ์การปรับขนาดให้เรียบขึ้น

อย่างไรก็ตามฉันไม่ทราบว่าlocfitทำงานอย่างไร แต่คุณต้องมีสิ่งที่จะหยุดคุณจากการปรับพื้นผิวที่ซับซ้อนเกินไป (GCV และ UBRE หรือ ML (RE) ML หากคุณเลือกที่จะใช้ [คุณไม่สามารถทำได้เหมือนคุณ set scale = -1] กำลังพยายามทำเช่นนั้น) ซึ่งไม่รองรับข้อมูล กล่าวอีกนัยหนึ่งคุณสามารถปรับคุณสมบัติของข้อมูลในท้องที่ได้ แต่คุณปรับสัญญาณรบกวนในตัวอย่างของข้อมูลที่คุณรวบรวมหรือคุณเหมาะสมกับค่าเฉลี่ยของการแจกแจงความน่าจะเป็นหรือไม่? gam() อาจกำลังบอกคุณบางอย่างเกี่ยวกับสิ่งที่สามารถประเมินได้จากข้อมูลของคุณโดยสมมติว่าคุณได้แยกมิติข้อมูลพื้นฐาน (ด้านบน) แล้ว

สิ่งที่ต้องดูอีกอย่างคือสมูทเทอร์ที่คุณใช้อยู่นั้นมีความเป็นสากลในแง่ที่ว่าสมูทตี้ที่เลือกนั้นถูกนำไปใช้ในทุกช่วงของสมูท Adaptive smoothers สามารถใช้ "เผื่อ" ความเรียบที่ได้รับในส่วนของข้อมูลที่การตอบสนองมีการเปลี่ยนแปลงอย่างรวดเร็ว gam()มีความสามารถในการใช้งานเครื่องปรับแบบเรียบ

ดู?smooth.termsและ?adaptive.smoothดูว่าสามารถใช้งานgam()อะไรได้บ้าง te()สามารถรวม smoothers เหล่านี้ได้มากที่สุดหากไม่ใช่ทั้งหมด (ตรวจสอบเอกสารที่สามารถและไม่สามารถรวมอยู่ในผลิตภัณฑ์เทนเซอร์) เพื่อให้คุณสามารถใช้พื้นฐานที่ปรับได้อย่างราบรื่นยิ่งขึ้นเพื่อพยายามจับภาพสเกลท้องถิ่นที่ดีกว่าในส่วนของข้อมูลที่ การตอบสนองเปลี่ยนแปลงอย่างรวดเร็ว

ฉันควรเพิ่มที่คุณจะได้รับ R เพื่อประเมินรูปแบบที่มีการตั้งค่าคงที่ขององศาอิสระใช้โดยระยะเรียบโดยใช้fx = TRUEอาร์กิวเมนต์และs() te()โดยทั่วไปชุด k จะเป็นสิ่งที่คุณต้องการและfx = TRUEและgam()ก็จะพอดีกับเส้นโค้งการถดถอยองศาคงที่ของเสรีภาพไม่ได้เป็นเส้นโค้งการถดถอยลงโทษ


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