ฉันคิดว่าเมื่อพยายามตีความค่าสัมประสิทธิ์พล็อตเหล่านี้โดย ,หรือมันช่วยได้มากในการรู้ว่าพวกเขาดูอย่างไรในบางกรณี โดยเฉพาะอย่างยิ่งพวกเขามองอย่างไรเมื่อเมทริกซ์การออกแบบโมเดลของคุณไม่มีความสัมพันธ์และเมื่อมีความสัมพันธ์ในการออกแบบของคุณλเข้าสู่ระบบ( λ )Σผม| βผม|
ด้วยเหตุนี้ฉันจึงสร้างข้อมูลที่สัมพันธ์และไม่เกี่ยวข้องเพื่อแสดง:
x_uncorr <- matrix(runif(30000), nrow=10000)
y_uncorr <- 1 + 2*x_uncorr[,1] - x_uncorr[,2] + .5*x_uncorr[,3]
sigma <- matrix(c( 1, -.5, 0,
-.5, 1, -.5,
0, -.5, 1), nrow=3, byrow=TRUE
)
x_corr <- x_uncorr %*% sqrtm(sigma)
y_corr <- y_uncorr <- 1 + 2*x_corr[,1] - x_corr[,2] + .5*x_corr[,3]
ข้อมูลx_uncorr
มีคอลัมน์ที่ไม่เกี่ยวข้อง
> round(cor(x_uncorr), 2)
[,1] [,2] [,3]
[1,] 1.00 0.01 0.00
[2,] 0.01 1.00 -0.01
[3,] 0.00 -0.01 1.00
ในขณะที่x_corr
มีความสัมพันธ์ที่กำหนดไว้ล่วงหน้าระหว่างคอลัมน์
> round(cor(x_corr), 2)
[,1] [,2] [,3]
[1,] 1.00 -0.49 0.00
[2,] -0.49 1.00 -0.51
[3,] 0.00 -0.51 1.00
ทีนี้มาดูที่แผนการของ lasso สำหรับทั้งสองกรณีนี้กัน ก่อนอื่นข้อมูลที่ไม่เกี่ยวข้อง
gnet_uncorr <- glmnet(x_uncorr, y_uncorr)
plot(gnet_uncorr)
คุณสมบัติคู่ที่โดดเด่น
- ตัวทำนายจะเข้าสู่โมเดลตามลำดับความสำคัญของสัมประสิทธิ์การถดถอยเชิงเส้นที่แท้จริง
- เส้นทางสัมประสิทธิ์ของแต่ละคุณลักษณะคือเส้น (ที่เกี่ยวกับ ) เป็นเส้นตรงแบบชิ้นเดียวและจะเปลี่ยนเฉพาะเมื่อตัวทำนายใหม่เข้าสู่โมเดล สิ่งนี้เป็นจริงสำหรับพล็อตที่เกี่ยวข้องกับและเป็นเหตุผลที่ดีที่จะชอบผู้อื่นมากกว่าΣผม| βผม|Σผม| βผม|
- เมื่อตัวทำนายใหม่เข้าสู่แบบจำลองมันจะส่งผลต่อความชันของเส้นทางสัมประสิทธิ์ของตัวทำนายทั้งหมดที่อยู่ในแบบจำลองในลักษณะที่กำหนดขึ้น ตัวอย่างเช่นเมื่อตัวทำนายที่สองเข้าสู่โมเดลความชันของเส้นทางสัมประสิทธิ์แรกจะถูกตัดครึ่ง เมื่อตัวทำนายที่สามเข้าสู่โมเดลความชันของเส้นทางสัมประสิทธิ์คือหนึ่งในสามของค่าดั้งเดิม
ทั้งหมดนี้เป็นข้อเท็จจริงทั่วไปที่นำไปใช้กับการถดถอยแบบ lasso กับข้อมูลที่ไม่เกี่ยวข้องและพวกเขาทั้งหมดสามารถพิสูจน์ได้ด้วยมือ (ออกกำลังกายดี!) หรือพบได้ในวรรณกรรม
ตอนนี้ให้ทำข้อมูลที่มีความสัมพันธ์กัน
gnet_corr <- glmnet(x_corr, y_corr)
plot(gnet_corr)
คุณสามารถอ่านบางสิ่งจากพล็อตนี้โดยเปรียบเทียบกับกรณีที่ไม่เกี่ยวข้อง
- เส้นทางตัวทำนายที่หนึ่งและสองมีโครงสร้างเดียวกันกับกรณีที่ไม่เกี่ยวข้องจนกระทั่งตัวทำนายที่สามเข้าสู่แบบจำลองแม้ว่าจะมีความสัมพันธ์กันก็ตาม นี่เป็นคุณสมบัติพิเศษของกรณีทำนายสองกรณีซึ่งฉันสามารถอธิบายได้ในอีกคำตอบหากมีความสนใจมันจะพาฉันไปไกลกว่าการอภิปรายในปัจจุบันเล็กน้อย
- ในอีกทางหนึ่งเมื่อผู้ทำนายที่สามเข้าสู่แบบจำลองเราจะเห็นการเบี่ยงเบนจากภาพที่เราคาดหวังว่าคุณสมบัติทั้งสามนั้นไม่ได้มีความสัมพันธ์กัน ค่าสัมประสิทธิ์ของคุณสมบัติที่สองแบนออกมาและคุณสมบัติที่สามเพิ่มขึ้นเป็นค่าสุดท้าย สังเกตุความลาดเอียงของฟีเจอร์แรกไม่ได้รับผลกระทบซึ่งเราจะไม่คาดหวังหากไม่มีความสัมพันธ์กัน! โดยพื้นฐานแล้วทรัพยากรที่ใช้ไปกับค่าสัมประสิทธิ์ภายในกลุ่มที่สามหรือใหญ่กว่านั้นอาจ "ซื้อขายรอบ" จนกว่าจะมีการกำหนดน้อยที่สุดพบว่า∑ | βผม|
ดังนั้นตอนนี้เรามาดูพล็อตของคุณจากชุดข้อมูลรถยนต์และอ่านสิ่งที่น่าสนใจออกไป (ฉันทำพล็อตของคุณใหม่ที่นี่เพื่อให้การสนทนานี้ง่ายต่อการอ่าน):
คำเตือน : ฉันเขียนการวิเคราะห์ต่อไปนี้เป็นการเฉพาะบนสมมติฐานที่ว่าเส้นโค้งแสดงค่าสัมประสิทธิ์มาตรฐานในตัวอย่างนี้พวกเขาทำไม่ได้ ค่าสัมประสิทธิ์ที่ไม่ได้มาตรฐานไม่ได้เป็นแบบไร้มิติและไม่สามารถเปรียบเทียบกันได้ดังนั้นจึงอาจไม่มีข้อสรุปใด ๆ จากพวกเขาในแง่ของความสำคัญในการทำนาย เพื่อการวิเคราะห์ที่ถูกต้องต่อไปนี้โปรดทำเป็นว่าพล็อตนั้นมีค่าสัมประสิทธิ์มาตรฐานและโปรดทำการวิเคราะห์ของคุณเองในเส้นทางสัมประสิทธิ์มาตรฐาน
- อย่างที่คุณพูดผู้
wt
ทำนายนั้นสำคัญมาก มันเข้าสู่โมเดลก่อนและมีการสืบเชื้อสายที่ช้าและมั่นคงสำหรับค่าสุดท้าย มันมีความสัมพันธ์สองสามอย่างที่ทำให้การขับขี่เป็นหลุมเป็นบ่อเล็กน้อยam
โดยเฉพาะดูเหมือนว่าจะมีผลอย่างมากเมื่อเข้าสู่
am
ก็มีความสำคัญเช่นกัน มันมาในภายหลังและมีความสัมพันธ์กับwt
มันส่งผลกระทบต่อความลาดชันของwt
ในทางที่รุนแรง มันมีความสัมพันธ์กับcarb
และqsec
เพราะเราไม่เห็นการชะลอตัวของความลาดชันที่คาดการณ์ได้เมื่อสิ่งเหล่านั้นเข้ามา หลังจากที่ตัวแปรทั้งสี่นี้เข้ามาเราจะเห็นรูปแบบที่ไม่สัมพันธ์กันอย่างดีดังนั้นจึงดูเหมือนว่าจะไม่เกี่ยวข้องกับตัวทำนายทั้งหมดในตอนท้าย
- มีบางอย่างเข้ามาที่ประมาณ 2.25 บนแกน x แต่เส้นทางของมันนั้นมองไม่เห็นคุณสามารถตรวจจับได้โดยส่งผลกระทบต่อพารามิเตอร์
cyl
และwt
cyl
ค่อนข้าง facinating มันเข้าที่สองจึงเป็นสิ่งสำคัญสำหรับรุ่นเล็ก หลังจากตัวแปรอื่น ๆ และโดยเฉพาะอย่างยิ่งการam
ป้อนเข้าก็ไม่สำคัญอีกต่อไปและแนวโน้มของมันกลับเป็นไปได้ในที่สุดก็ถูกกำจัดออกไป ดูเหมือนว่าcyl
จะสามารถจับเอฟเฟ็กต์ของตัวแปรทั้งหมดที่เข้ามาในตอนท้ายของกระบวนการได้อย่างสมบูรณ์ ไม่ว่าจะเหมาะสมกว่าที่จะใช้cyl
หรือกลุ่มของตัวแปรเสริมขึ้นอยู่กับการแลกเปลี่ยนอคติ การมีกลุ่มในแบบจำลองขั้นสุดท้ายของคุณจะเพิ่มความแปรปรวนอย่างมาก แต่อาจเป็นกรณีที่ความเอนเอียงที่ต่ำกว่าทำขึ้นได้!
เป็นการแนะนำเล็ก ๆ น้อย ๆ เกี่ยวกับวิธีที่ฉันได้เรียนรู้การอ่านข้อมูลจากแปลงเหล่านี้ ฉันคิดว่าพวกเขาสนุกมาก!
ขอบคุณสำหรับการวิเคราะห์ที่ยอดเยี่ยม หากต้องการรายงานด้วยคำง่ายๆคุณจะบอกว่า wt, am และ cyl เป็น 3 ตัวทำนายที่สำคัญที่สุดของ mpg นอกจากนี้หากคุณต้องการสร้างแบบจำลองสำหรับการทำนายคุณจะรวมรูปแบบใดตามตัวเลขนี้: wt, am และ cyl? หรือชุดค่าผสมอื่น ๆ นอกจากนี้คุณดูเหมือนจะไม่ต้องการแลมบ์ดาที่ดีที่สุดสำหรับการวิเคราะห์ มันไม่สำคัญเหมือนการถดถอยแบบสันหรือไม่?
ฉันว่ากรณีwt
และam
มีความชัดเจนพวกเขามีความสำคัญ cyl
มีความละเอียดอ่อนกว่ามากมันมีความสำคัญในรูปแบบขนาดเล็ก แต่ไม่เกี่ยวข้องเลยในรูปแบบขนาดใหญ่
ฉันไม่สามารถตัดสินใจได้ว่าจะรวมสิ่งใดตามตัวเลขเท่านั้นซึ่งต้องตอบบริบทของสิ่งที่คุณกำลังทำอยู่จริงๆ คุณอาจจะบอกว่าถ้าคุณต้องการรูปแบบสามทำนายแล้วwt
, am
และcyl
เป็นทางเลือกที่ดีที่พวกเขาเป็นที่เกี่ยวข้องในโครงการใหญ่ของสิ่งและควรจะจบลงด้วยการมีผลขนาดที่เหมาะสมในรูปแบบขนาดเล็ก นี่เป็นการคาดการณ์ล่วงหน้าว่าคุณมีเหตุผลภายนอกที่จะต้องการตัวทำนายแบบสามตัวเล็ก ๆ
มันเป็นความจริงการวิเคราะห์ประเภทนี้จะครอบคลุมทั่วทั้ง lambdas และให้คุณกำจัดความสัมพันธ์ในช่วงของความซับซ้อนของโมเดล ที่กล่าวว่าสำหรับรุ่นสุดท้ายฉันคิดว่าการปรับแลมบ์ดาที่ดีที่สุดนั้นสำคัญมาก ในกรณีที่ไม่มีข้อ จำกัด อื่น ๆ ฉันจะใช้การตรวจสอบความถูกต้องแบบครอสเพื่อค้นหาแลมบ์ดาที่คาดคะเนได้มากที่สุดจากนั้นใช้แลมบ์ดานั้นสำหรับแบบจำลองขั้นสุดท้ายและการวิเคราะห์ขั้นสุดท้าย
λ
ในอีกทางหนึ่งบางครั้งก็มีข้อ จำกัด จากภายนอกที่ความซับซ้อนของแบบจำลอง (ค่าใช้จ่ายในการดำเนินงานระบบดั้งเดิมการอธิบายแบบเรียบง่ายการตีความทางธุรกิจความงามเชิงมรดก) และการตรวจสอบประเภทนี้จะช่วยให้คุณเข้าใจรูปร่างของข้อมูลของคุณ การแลกเปลี่ยนที่คุณทำโดยเลือกรุ่นที่เล็กกว่า
-1
glmnet(as.matrix(mtcars[-1]), mtcars[,1])