จะตรวจสอบข้ามกับ cv.glmnet (LASSO regression ใน R) ได้อย่างไร?


10

ฉันสงสัยว่าจะเข้าใกล้การฝึกอบรมและทดสอบแบบจำลอง LASSO โดยใช้ glmnet ใน R ได้อย่างไร

  • โดยเฉพาะฉันสงสัยว่าจะทำอย่างไรหากขาดชุดข้อมูลการทดสอบภายนอกทำให้ฉันต้องใช้การตรวจสอบข้าม (หรือวิธีการอื่นที่คล้ายคลึงกัน) เพื่อทดสอบแบบจำลอง LASSO ของฉัน

ให้ฉันทำลายสถานการณ์ของฉัน:

ฉันมีชุดข้อมูลเพียงชุดเดียวเพื่อแจ้งและฝึกอบรมโมเดล glmnet ของฉัน ดังนั้นฉันจะต้องใช้การตรวจสอบข้ามเพื่อแยกข้อมูลของฉันเพื่อสร้างวิธีทดสอบโมเดลของฉัน

ฉันกำลังใช้อยู่cv.glmnetซึ่งตามรายละเอียดแพ็คเกจ :

ทำการตรวจสอบความถูกต้องข้ามของ k-fold สำหรับ glmnet, สร้างพล็อตและส่งกลับค่าสำหรับแลมบ์ดา

  • การตรวจสอบข้ามถูกดำเนินการในcv.glmnetการเลือกแลมบ์ดาที่ดีที่สุดหรือเป็นวิธีการตรวจสอบข้ามโดยทั่วไปหรือไม่

    • กล่าวอีกนัยหนึ่งฉันยังต้องทำอีกขั้นตอนการตรวจสอบข้ามเพื่อ "ทดสอบ" โมเดลของฉันหรือไม่

ฉันทำงานกับข้อสันนิษฐานที่ว่า "ใช่แล้ว"

ในกรณีนี้ฉันจะตรวจสอบcv.glmnetรุ่นของฉันได้อย่างไร

  • ฉันต้องทำด้วยตนเองหรืออาจเป็นcaretฟังก์ชั่นที่มีประโยชน์สำหรับรุ่น glmnet หรือไม่?

  • ฉันจะใช้ "ลูป" สองจุดศูนย์กลางของการตรวจสอบความถูกต้องไขว้หรือไม่ ... ฉันใช้ "ลูปด้านใน" ของ CV ผ่านcv.glmnetเพื่อกำหนดค่าแลมบ์ดาที่ดีที่สุดในแต่ละkเท่าของ "ลูปภายนอก" ของการประมวลผลการตรวจสอบความถูกต้องข้าม ?

    • หากฉันทำการตรวจสอบความถูกต้องของcv.glmnetรูปแบบการตรวจสอบความถูกต้องไขว้ฉันจะแยกโมเดล "ดีที่สุด" (จากแลมบ์ดา "ที่ดีที่สุด") จากแต่ละcv.glmnetรุ่นในแต่ละช่วงของการตรวจสอบไขว้ภายนอก

      • หมายเหตุ: ฉันกำหนด "ดีที่สุด" รูปแบบเป็นรูปแบบที่เกี่ยวข้องกับแลมบ์ดาที่ผลิต MSE ภายใน 1 SE ขั้นต่ำที่ ... นี้เป็น$lambda.1seในcv.glmnetรูปแบบ

บริบท:

ฉันพยายามที่จะทำนายอายุต้นไม้ ("อายุ") ตามเส้นผ่าศูนย์กลางต้นไม้ ("D"), D ^ 2 และสปีชีส์ ("factor (SPEC)") [สมการที่เกิด: Age ~ D + factor(SPEC) + D^2] ฉันมีแถวข้อมูล ~ 50K แต่ข้อมูลนั้นยาว (ติดตามบุคคลตลอดเวลา) และประกอบด้วย ~ 65 สปีชีส์


1
สำหรับผู้ที่โหวตให้ปิดโดยไม่แสดงความคิดเห็น: มันไม่มีประโยชน์เลย ... แจ้งให้เราทราบว่าปัญหาของคุณคืออะไรในความคิดเห็นและฉันจะพยายามแก้ไข
theestestecologist

1
พวกเขาไม่ได้ลงคะแนนให้ปิดพวกเขากำลังลงคะแนนเพื่อย้ายไปยัง CrossValidated ฉันเพิ่งเพิ่มคะแนนของฉันไปที่
Hack-R

@theforestecologist: คุณควรเห็นสาเหตุของการถูกปิด / ย้ายข้อมูลโดยคลิกที่ปุ่ม 'close'
DWIN

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

คำตอบ:


3

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

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

ตัวอย่างเช่นในวัตถุที่ส่งคืน ::

cvmเป็นค่าเฉลี่ยข้อผิดพลาดข้ามการตรวจสอบ cvsdคือค่าเบี่ยงเบนมาตรฐานโดยประมาณ

เช่นเดียวกับค่าที่ส่งคืนอื่น ๆ ค่าเหล่านี้จะถูกคำนวณในชุดทดสอบ ในที่สุด,

glmnet.fit ให้รูปแบบการฝึกอบรมกับข้อมูลทั้งหมด (การฝึกอบรม + ทดสอบ) ด้วยพารามิเตอร์ที่ดีที่สุด

ฉันต้องทำด้วยตนเองหรือบางทีฟังก์ชันคาเร็ตมีประโยชน์สำหรับรุ่น glmnet หรือไม่

คุณไม่จำเป็นต้องทำสิ่งนี้ด้วยตนเอง 'Caret' จะมีประโยชน์มากและเป็นหนึ่งในแพ็คเกจที่ฉันชอบเพราะมันใช้ได้กับรุ่นอื่น ๆ ที่มีไวยากรณ์เหมือนกัน ตัวผมเองมักจะใช้มากกว่าcaret cv.glmnetอย่างไรก็ตามในสถานการณ์ของคุณมันเป็นสิ่งเดียวกัน

ฉันจะใช้ "ลูป" สองจุดศูนย์กลางของการตรวจสอบไขว้หรือไม่ ... ฉันใช้ "ลูปด้านใน" ของ CV ผ่าน cv.glmnet เพื่อกำหนดค่าแลมบ์ดาที่ดีที่สุดภายในแต่ละเท่าของ k เท่าของ "ลูปภายนอก" ของ k-fold การประมวลผลการตรวจสอบข้าม?

คุณสามารถทำเช่นนี้และแนวคิดนี้จะคล้ายกับความคิดของการซ้อนกันข้ามการตรวจสอบการตรวจสอบข้ามซ้อนกันสำหรับการเลือกรูปแบบ

ถ้าฉันทำการตรวจสอบความถูกต้องของโมเดล cv.glmnet ของฉันแล้วฉันจะแยกโมเดล "ดีที่สุด" (จากค่าแลมบ์ดา "ดีที่สุด") จากแต่ละรุ่น cv.glmnet ภายในแต่ละวงของวงอื่น "การตรวจสอบข้าม?

เพียงแค่วนรอบที่คุณสร้างข้อมูลการฝึกอบรมและข้อมูลการทดสอบทำงานcv.glmnetบนข้อมูลการฝึกอบรมและใช้แบบจำลองglmnet.fitเพื่อทำนายข้อมูลการทดสอบ


@discupulus: ขอบคุณ คุณสามารถให้หลักฐานบางอย่างได้ไหม? ได้โปรดเดินผ่านฉันไปได้) นอกจากนี้เมื่อได้รับคำตอบของคุณนั่นหมายความว่าไม่จำเป็นต้องมีกระบวนการตรวจสอบความถูกต้องข้ามซึ่งกันและกันเพื่อรายงานตัวชี้วัดประสิทธิภาพการทำงานของข้อมูล (ฉันสามารถรายงาน MSE เกี่ยวกับกรณี lambda.1se เป็นแบบจำลองขั้นสุดท้ายของฉันได้หรือไม่)
theforestecologist

ใช่ไม่จำเป็นต้องมีการตรวจสอบความถูกต้องข้าม สำหรับหลักฐานคุณสามารถดูซอร์สโค้ดของcv.glmnetฟังก์ชั่นตามที่Rเป็น opensource เพียงพิมพ์cv.glmnetในคอนโซล
สาวก

3
@discipulus ฉันส่งอีเมล Trevor Hastie ถามว่า "ทำ cv.glmnet (การใช้งาน R) เท่านั้นที่จะเลือกแลมบ์ดา CV หรือทำ CV ภายนอกเพื่อตรวจสอบแลมบ์ดาที่เลือกหรือไม่ในคำอื่น ๆ เราต้องใช้รหัส CV ภายนอกของเราเองหรือไม่ ต้องการตรวจสอบแลมบ์ดาที่เลือกหรือไม่ " และเขาตอบกลับ (ค่อนข้างเร็ว) "ใช่เพียงเพื่อเลือกแลมบ์ดา" ซึ่งฉันตีความว่าหมายถึง CV ภายในเท่านั้นและเราจะต้องเขียนรหัส CV ภายนอกของเราเอง
qoheleth

@theforestecologist ฉันพยายามที่จะเรียนรู้เพิ่มเติมเกี่ยวกับการตรวจสอบข้ามและค้นหาโพสต์ของคุณการศึกษา ฉันไม่เข้าใจว่าคุณหมายถึงอะไรโดย cv.glmnet ซึ่งทำหน้าที่เป็นขั้นตอนการตรวจสอบความถูกต้องโดยทั่วไป ฉันคิดว่ามีเพียงพารามิเตอร์เดียวที่มีให้เลือกคือแลมบ์ดา - ชั้นนอกของการตรวจสอบความถูกต้องของสิ่งที่มีอยู่? จะขอบคุณถ้าคุณสามารถตอบกลับ ขอบคุณ!
user2450223
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.