นี่เป็นคำถามที่ค่อนข้างเก่าอยู่แล้ว แต่ฉันรู้สึกว่าในขณะเดียวกันคำตอบส่วนใหญ่ที่นี่ค่อนข้างล้าสมัย (และคำถามที่ถูกตรวจสอบเพราะคำตอบที่ถูกต้องนั้นเป็นคำที่ผิดธรรมดา)
ประการแรกในแง่ของการทำนายผลงานที่ดีมันไม่เป็นความจริงในระดับสากลว่า LASSO นั้นดีกว่าแบบขั้นตอนเสมอ บทความ"Extended Comparisons of Best Selection Selection, Forward Stepwise Selection และ Lasso"โดย Hastie et al (2017) ให้การเปรียบเทียบอย่างกว้างขวางเกี่ยวกับ stepwise ไปข้างหน้า LASSO และ LASSO บางรุ่นเช่น LASSO ที่ผ่อนคลายและชุดย่อยที่ดีที่สุดและพวกเขา แสดงว่า stepwise ดีกว่า LASSO บางครั้ง ความแตกต่างของ LASSO แม้ว่า - LASSO ที่ผ่อนคลาย - เป็นสิ่งที่สร้างความแม่นยำในการทำนายแบบจำลองสูงสุดภายใต้สถานการณ์ที่กว้างที่สุด ข้อสรุปเกี่ยวกับสิ่งที่ดีที่สุดนั้นขึ้นอยู่กับสิ่งที่คุณพิจารณาว่าดีที่สุดเช่นว่าจะเป็นความแม่นยำในการทำนายสูงสุดหรือเลือกตัวแปรบวกที่ผิดพลาดน้อยที่สุด
มีสวนสัตว์ทั้งหมดของวิธีการเรียนรู้กระจัดกระจาย แต่ส่วนใหญ่ดีกว่า LASSO เช่นมีLASSO ที่ผ่อนคลายของ Meinhausen , LASSO ที่ปรับตัวได้และSCAD และ MCP ได้รับการลงโทษการถดถอยตามที่นำมาใช้ในncvreg
แพ็คเกจซึ่งทั้งหมดมีอคติน้อยกว่า LASSO มาตรฐานและเป็นที่นิยมมากกว่า นอกจากนี้หากคุณมีความสนใจในวิธีการแก้ปัญหาแบบแยกส่วนด้วยประสิทธิภาพการทำนายที่ดีที่สุด L0 ลงโทษการถดถอย (อาคาเซตย่อยที่ดีที่สุดคือการลงโทษของ nr ของค่าสัมประสิทธิ์ไม่ใช่ศูนย์ตรงข้ามกับผลรวมของค่าสัมประสิทธิ์สัมบูรณ์ใน LASSO) ดีกว่า LASSO ดูตัวอย่างl0ara
บรรจุภัณฑ์ที่ใกล้เคียงกับ L0 ลงโทษ GLMs โดยใช้ขั้นตอนการปรับเปลี่ยนแบบวนซ้ำซึ่งแตกต่างจาก LASSO ยังทำงานได้ดีกับตัวแปร collinear สูงและL0Learn
แพคเกจซึ่งสามารถใส่ L0 แบบจำลองการถดถอยที่ถูกลงโทษได้โดยใช้การประสานงานของโคตรที่อาจรวมกับการปรับ L2 เพื่อปรับ collinearity
ดังนั้นกลับมาที่คำถามเดิมของคุณ: ทำไมไม่ลองใช้ LASSO เพื่อเลือกตัวแปร? :
(1) เนื่องจากค่าสัมประสิทธิ์จะมีอคติสูงซึ่งได้รับการปรับปรุงในการผ่อนคลาย LASSO, MCP และ SCAD และได้รับการแก้ไขอย่างสมบูรณ์ใน L0 ลงโทษที่ถดถอย (ซึ่งมีคุณสมบัติของ oracle เต็มรูปแบบนั่นคือสามารถเลือกได้ทั้งตัวแปรเชิงสาเหตุและ retun ค่าสัมประสิทธิ์ที่เป็นกลางสำหรับกรณี p> n)
(2) เพราะมันมีแนวโน้มที่จะสร้างวิธีการบวกเท็จมากกว่า L0 ลงโทษถดถอย (ในการทดสอบของฉันl0ara
ทำงานได้ดีที่สุดแล้วคือสันปรับซ้ำ iterative ตามด้วยL0Learn
)
(3) เพราะมันไม่สามารถจัดการกับตัวแปร collinear ได้ดี (โดยหลักแล้วมันจะสุ่มเลือกหนึ่งในตัวแปร collinear) - ซ้ำl0ara
การปรับตัวริดจ์/ และการลงโทษ L0L2 L0Learn
นั้นดีกว่ามากในการจัดการกับสิ่งนั้น
แน่นอนโดยทั่วไปคุณจะต้องใช้การตรวจสอบความถูกต้องแบบไขว้เพื่อปรับพารามิเตอร์การทำให้เป็นมาตรฐานของคุณเพื่อให้ได้ประสิทธิภาพการทำนายที่ดีที่สุด แต่นั่นไม่ใช่ปัญหา และคุณยังสามารถทำการอนุมานมิติสูงในพารามิเตอร์ของคุณและคำนวณช่วงความเชื่อมั่น 95% สำหรับสัมประสิทธิ์ของคุณหากคุณต้องการผ่านการบูตแบบ nonparametric แม้ว่ามันจะค่อนข้างช้าแล้ว)
คอมพิวเตอร์ Lasso ไม่ช้าเพื่อให้พอดีกว่าวิธีแบบขั้นตอนครับไม่แน่นอนถ้าใครใช้เพิ่มประสิทธิภาพสูงรหัสที่ใช้เริ่มต้นที่อบอุ่นเพื่อเพิ่มประสิทธิภาพการกูเชือกของคุณ (คุณสามารถเปรียบเทียบตัวเองโดยใช้fs
คำสั่งสำหรับการขั้นตอนไปข้างหน้าและlasso
สำหรับ Lasso ในbestsubset
แพคเกจ) ความจริงที่ว่าวิธีการแบบขั้นตอนยังคงได้รับความนิยมอาจเกี่ยวข้องกับความเชื่อที่ผิด ๆ ที่หลายคนสามารถทำได้เพียงแค่เก็บแบบจำลองสุดท้ายของคุณและรายงานว่ามันเกี่ยวข้องกับค่า p - ซึ่งอันที่จริงแล้วไม่ใช่สิ่งที่ถูกต้อง คำนึงถึงความไม่แน่นอนที่เกิดจากการเลือกแบบจำลองของคุณทำให้ค่า p ในแง่ดีเกินไป
หวังว่าจะช่วยได้ไหม