การตรวจสอบความถดถอยแบบไขว้ใน R


10

ฟังก์ชัน R cv.glm (ไลบรารี่: บูต) คำนวณข้อผิดพลาดในการทำนายการตรวจสอบความถูกต้องข้ามแบบ K-fold สำหรับโมเดลเชิงเส้นทั่วไปและส่งกลับเดลต้า มันเหมาะสมหรือไม่ที่จะใช้ฟังก์ชั่นนี้สำหรับการถดถอยแบบ lasso (ไลบรารี่: glmnet) และถ้าเป็นเช่นนั้นจะสามารถดำเนินการได้อย่างไร? ไลบรารี glmnet ใช้ cross-validation เพื่อให้ได้พารามิเตอร์การกลึงที่ดีที่สุด แต่ฉันไม่พบตัวอย่างใด ๆ ที่ cross-validates สมการ glmnet สุดท้าย


2
มันสมเหตุสมผลแล้ว & แม้ว่า LASSO จะปรับพารามิเตอร์ (ไฮเปอร์ -) เพียงพารามิเตอร์เดียวเท่านั้นหากคุณต้องการได้ค่าประมาณที่ดีที่สุดที่คุณสามารถทำได้จากตัวอย่างที่ต้องการคุณต้องใช้ลูปการตรวจสอบความถูกต้องภายนอก โปรดดูที่คุณสามารถ overfit โดยการฝึกอบรมอัลกอริทึมการเรียนรู้ด้วยเครื่อง CV / Bootstrap ได้หรือไม่? & เอกสารที่อ้างถึง
Scortchi - Reinstate Monica

ขอแนะนำให้ใช้ glmnet มากกว่า glm esp ถ้าคุณกำลังทำประวัติย่อ ถ้าฉันจำได้ว่าแพ็คเกจ glm นั้นเจ็บปวดที่จะใช้ นอกจากนี้ cv.glmnet จะเปิดเผยพารามิเตอร์มากกว่า cv.glm
smci

คำตอบ:


9

ตัวอย่างในการทำวานิลลาการตรวจสอบข้ามธรรมดาสำหรับเชือกในglmnetในmtcars ชุดข้อมูล

  1. โหลดชุดข้อมูล

  2. เตรียมคุณสมบัติ (ตัวแปรอิสระ) พวกเขาควรจะเป็นmatrixระดับ วิธีที่ง่ายที่สุดในการแปลงdfที่มีตัวแปรเด็ดขาดเข้าผ่านทางmatrix model.matrixโปรดทราบว่าโดยค่าเริ่มต้นglmnetคุณจะต้องมีการสกัดกั้นดังนั้นคุณควรจะตัดการสกัดกั้นจากเมทริกซ์โมเดล

  3. เตรียมการตอบสนอง (ตัวแปรตาม) ให้รหัสรถที่มีค่าเฉลี่ยmpgสูงกว่าอย่างมีประสิทธิภาพ ('1') และที่เหลือไม่มีประสิทธิภาพ ('0') แปลงตัวแปรนี้เป็นตัวประกอบ

  4. cv.glmnetเรียกข้ามการตรวจสอบผ่าน มันจะดึงalpha=1จากglmnetพารามิเตอร์เริ่มต้นซึ่งเป็นสิ่งที่คุณขอ: lasso ถดถอย

  5. โดยการตรวจสอบผลลัพธ์ของการตรวจสอบข้ามคุณอาจสนใจข้อมูลอย่างน้อย 2 ชิ้น:

    • แลมบ์ดาที่ช่วยลดข้อผิดพลาดที่ตรวจสอบข้ามได้ glmnetจริงมี 2 lambdas: และlambda.min lambda.1seมันเป็นการตัดสินใจของคุณในฐานะนักสถิติที่ควรใช้

    • ส่งผลให้ค่าสัมประสิทธิ์ normalized

โปรดดูรหัส R ตามคำแนะนำข้างต้น:

# Load data set
data("mtcars")

# Prepare data set 
x   <- model.matrix(~.-1, data= mtcars[,-1])
mpg <- ifelse( mtcars$mpg < mean(mtcars$mpg), 0, 1)
y   <- factor(mpg, labels = c('notEfficient', 'efficient'))

library(glmnet)

# Run cross-validation
mod_cv <- cv.glmnet(x=x, y=y, family='binomial')

mod_cv$lambda.1se
[1] 0.108442

coef(mod_cv, mod_cv$lambda.1se)
                     1
(Intercept)  5.6971598
cyl         -0.9822704
disp         .        
hp           .        
drat         .        
wt           .        
qsec         .        
vs           .        
am           .        
gear         .        
carb         .  

mod_cv$lambda.min
[1] 0.01537137

coef(mod_cv, mod_cv$lambda.min)
                      1
(Intercept)  6.04249733
cyl         -0.95867199
disp         .         
hp          -0.01962924
drat         0.83578090
wt           .         
qsec         .         
vs           .         
am           2.65798203
gear         .         
carb        -0.67974620

ความคิดเห็นสุดท้าย:

  • บันทึกผลลัพธ์ของโมเดลไม่ได้เกี่ยวกับนัยสำคัญทางสถิติของค่าสัมประสิทธิ์เท่านั้นที่มีค่า

  • penalizer L1 (เชือก) ซึ่งคุณถามหาเป็นที่รู้จักสำหรับความไม่แน่นอนเป็นหลักฐานในการนี้โพสต์บล็อกและ stackexchange นี้คำถาม วิธีที่ดีกว่าก็คือการตรวจสอบข้ามalphaซึ่งจะช่วยให้คุณตัดสินใจเลือกการลงโทษที่เหมาะสมของ l1 และ l2

  • อีกทางเลือกหนึ่งในการตรวจสอบข้ามอาจจะเปลี่ยนเป็นคาเร็ต train( ... method='glmnet')

  • และในที่สุดวิธีที่ดีที่สุดในการเรียนรู้เพิ่มเติมcv.glmnetและการเริ่มต้นที่มาจากglmnetหลักสูตร?glmnetในคอนโซลของ R)))


คำตอบที่ดี .. มันก็คุ้มค่าที่จะใช้ CV หลาย ๆ ครั้งและเฉลี่ยโค้งข้อผิดพลาด (ดู? cv.glmnet) เพื่อบัญชีสำหรับการสุ่มตัวอย่าง
user20650

@SergeyBushmanov มีประโยชน์มาก!
วิทยาศาสตร์ด้านป่าไม้

สวัสดีฉันรู้ว่านี่เป็นบทความเก่า แต่ฉันอยากถามคำถามคุณ คุณพูดถึงว่าผลลัพธ์ของตัวแบบไม่ได้เกี่ยวกับนัยสำคัญทางสถิติของสัมประสิทธิ์ดังนั้นคุณจะตัดสินได้อย่างไรว่ามันมีนัยสำคัญหรือไม่?
Jun Jang

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