การตีความความน่าจะเป็นของการแสดงออกบ่อยครั้งของความน่าจะเป็น, ค่า p-etcetera สำหรับโมเดล LASSO และการถดถอยแบบขั้นตอนไม่ถูกต้อง
การแสดงออกเหล่านั้นประเมินค่าความน่าจะเป็นสูงเกินไป เช่นช่วงความมั่นใจ 95% สำหรับพารามิเตอร์บางตัวควรจะบอกว่าคุณมีความน่าจะเป็น 95% ที่วิธีการนี้จะส่งผลให้เกิดช่วงเวลาด้วยตัวแปรตัวแบบที่แท้จริงภายในช่วงเวลานั้น
อย่างไรก็ตามโมเดลที่ได้รับการติดตั้งนั้นไม่ได้เป็นผลมาจากสมมติฐานเดียวทั่วไปและเราเลือกที่จะเก็บเชอร์รี่ (เลือกจากรุ่นอื่น ๆ ที่เป็นไปได้) เมื่อเราทำการถดถอยแบบขั้นตอนหรือ LASSO ถดถอย
มันมีเหตุผลเล็กน้อยที่จะประเมินความถูกต้องของพารามิเตอร์โมเดล (โดยเฉพาะเมื่อเป็นไปได้ว่าโมเดลนั้นไม่ถูกต้อง)
ในตัวอย่างด้านล่างอธิบายในภายหลังแบบจำลองนั้นเหมาะกับผู้ลงทะเบียนหลายคน สิ่งนี้ทำให้เป็นไปได้ว่ามีการเลือก regressor ใกล้เคียง (ซึ่งมีความสัมพันธ์กันอย่างมาก) ในแบบจำลองแทนที่จะเป็นแบบที่อยู่ในแบบจำลองอย่างแท้จริง ความสัมพันธ์ที่แข็งแกร่งทำให้ค่าสัมประสิทธิ์มีข้อผิดพลาด / ความแปรปรวนจำนวนมาก (เกี่ยวข้องกับเมทริกซ์( XTX)- 1 )
อย่างไรก็ตามความแปรปรวนสูงนี้เนื่องจากความหลากหลายของสีไม่ได้ 'เห็น' ในการวินิจฉัยเช่นค่า p หรือค่าความคลาดเคลื่อนมาตรฐานของสัมประสิทธิ์เนื่องจากสิ่งเหล่านี้ขึ้นอยู่กับเมทริกซ์การออกแบบขนาดเล็กXมีregressors น้อยกว่า (และไม่มีวิธีการที่ตรงไปตรงมาในการคำนวณสถิติเหล่านั้นสำหรับ LASSO)
ตัวอย่าง: กราฟด้านล่างซึ่งแสดงผลลัพธ์ของแบบจำลองของเล่นสำหรับสัญญาณบางอย่างที่เป็นผลรวมเชิงเส้นของเส้นโค้ง Gaussian 10 เส้น (เช่นนี้อาจคล้ายกับการวิเคราะห์ทางเคมีที่สัญญาณสำหรับสเปกตรัมถือว่าเป็นผลรวมเชิงเส้นของ องค์ประกอบหลายอย่าง) สัญญาณของ 10 เส้นโค้งประกอบไปด้วยแบบจำลองของส่วนประกอบ 100 ชิ้น (เส้นโค้งแบบเกาส์ที่มีค่าเฉลี่ยต่างกัน) โดยใช้ LASSO สัญญาณมีการประมาณที่ดี (เปรียบเทียบเส้นโค้งสีแดงและสีดำซึ่งอยู่ใกล้พอสมควร) แต่ค่าสัมประสิทธิ์พื้นฐานที่เกิดขึ้นจริงนั้นไม่ได้รับการประเมินที่ดีและอาจผิดพลาดได้อย่างสมบูรณ์ (เปรียบเทียบแถบสีแดงและสีดำกับจุดที่ไม่เหมือนกัน) ดูเพิ่มเติม 10 ค่าสัมประสิทธิ์ล่าสุด:
91 91 92 93 94 95 96 97 98 99 100
true model 0 0 0 0 0 0 0 142.8 0 0 0
fitted 0 0 0 0 0 0 129.7 6.9 0 0 0
แบบจำลอง LASSO เลือกค่าสัมประสิทธิ์ที่ใกล้เคียงกันมาก แต่จากมุมมองของสัมประสิทธิ์ตัวเองมันหมายถึงข้อผิดพลาดขนาดใหญ่เมื่อค่าสัมประสิทธิ์ที่ไม่ควรเป็นศูนย์คาดว่าจะเป็นศูนย์และค่าสัมประสิทธิ์ข้างเคียงที่ควรเป็นศูนย์ประมาณนั้น ไม่ใช่ศูนย์ ช่วงความเชื่อมั่นใด ๆ สำหรับค่าสัมประสิทธิ์จะทำให้รู้สึกน้อยมาก
LASSO ที่เหมาะสม
ฟิตติ้งแบบขั้นตอน
ในการเปรียบเทียบสามารถใช้เส้นโค้งเดียวกันกับอัลกอริทึมแบบขั้นตอนที่นำไปสู่ภาพด้านล่าง (มีปัญหาคล้ายกันที่สัมประสิทธิ์อยู่ใกล้ แต่ไม่ตรงกัน)
แม้ว่าคุณจะพิจารณาความถูกต้องของเส้นโค้ง (แทนที่จะเป็นพารามิเตอร์ซึ่งในจุดก่อนหน้านี้มีความชัดเจนว่ามันไม่มีเหตุผล) คุณก็ต้องจัดการกับการมีน้ำหนักเกิน เมื่อคุณทำโพรซีเดอร์ที่เหมาะสมกับ LASSO แล้วคุณจะใช้ข้อมูลการฝึกอบรม (เพื่อให้พอดีกับโมเดลที่มีพารามิเตอร์ต่างกัน) และทดสอบ / ตรวจสอบข้อมูล (เพื่อปรับแต่ง / ค้นหาว่าเป็นพารามิเตอร์ที่ดีที่สุด) แต่คุณควรใช้ชุดแยกต่างหากชุดที่สามของข้อมูลการทดสอบ / การตรวจสอบเพื่อหาประสิทธิภาพของข้อมูล
p-value หรือสิ่ง simular จะไม่ทำงานเพราะคุณกำลังทำงานกับรุ่นที่ปรับจูนซึ่งเป็นการเก็บเชอร์รี่และแตกต่างกัน (องศาที่ใหญ่กว่ามากอิสระ) จากวิธีการติดตั้งเชิงเส้นปกติ
ประสบปัญหาเดียวกันถดถอยแบบขั้นตอนหรือไม่
R2
ฉันคิดว่าเหตุผลหลักในการใช้ LASSO แทนการถดถอยแบบขั้นตอนคือ LASSO อนุญาตให้เลือกพารามิเตอร์โลภน้อยลงซึ่งได้รับอิทธิพลจากความหลากหลายทางสัมพันธภาพน้อยลง (ความแตกต่างระหว่าง LASSO และ stepwise: ความเหนือกว่าของ LASSO มากกว่าการเลือกไปข้างหน้า / กำจัดไปข้างหลังในแง่ของข้อผิดพลาดการตรวจสอบความถูกต้องของการตรวจสอบไขว้ของรุ่น )
รหัสสำหรับภาพตัวอย่าง
# settings
library(glmnet)
n <- 10^2 # number of regressors/vectors
m <- 2 # multiplier for number of datapoints
nel <- 10 # number of elements in the model
set.seed(1)
sig <- 4
t <- seq(0,n,length.out=m*n)
# vectors
X <- sapply(1:n, FUN <- function(x) dnorm(t,x,sig))
# some random function with nel elements, with Poisson noise added
par <- sample(1:n,nel)
coef <- rep(0,n)
coef[par] <- rnorm(nel,10,5)^2
Y <- rpois(n*m,X %*% coef)
# LASSO cross validation
fit <- cv.glmnet(X,Y, lower.limits=0, intercept=FALSE,
alpha=1, nfolds=5, lambda=exp(seq(-4,4,0.1)))
plot(fit$lambda, fit$cvm,log="xy")
plot(fit)
Yfit <- (X %*% coef(fit)[-1])
# non negative least squares
# (uses a stepwise algorithm or should be equivalent to stepwise)
fit2<-nnls(X,Y)
# plotting
par(mgp=c(0.3,0.0,0), mar=c(2,4.1,0.2,2.1))
layout(matrix(1:2,2),heights=c(1,0.55))
plot(t,Y,pch=21,col=rgb(0,0,0,0.3),bg=rgb(0,0,0,0.3),cex=0.7,
xaxt = "n", yaxt = "n",
ylab="", xlab = "",bty="n")
#lines(t,Yfit,col=2,lwd=2) # fitted mean
lines(t,X %*% coef,lwd=2) # true mean
lines(t,X %*% coef(fit2), col=3,lwd=2) # 2nd fit
# add coefficients in the plot
for (i in 1:n) {
if (coef[i] > 0) {
lines(c(i,i),c(0,coef[i])*dnorm(0,0,sig))
points(i,coef[i]*dnorm(0,0,sig), pch=21, col=1,bg="white",cex=1)
}
if (coef(fit)[i+1] > 0) {
# lines(c(i,i),c(0,coef(fit)[i+1])*dnorm(0,0,sig),col=2)
# points(i,coef(fit)[i+1]*dnorm(0,0,sig), pch=21, col=2,bg="white",cex=1)
}
if (coef(fit2)[i+1] > 0) {
lines(c(i,i),c(0,coef(fit2)[i+1])*dnorm(0,0,sig),col=3)
points(i,coef(fit2)[i+1]*dnorm(0,0,sig), pch=21, col=3,bg="white",cex=1)
}
}
#Arrows(85,23,85-6,23+10,-0.2,col=1,cex=0.5,arr.length=0.1)
#Arrows(86.5,33,86.5-6,33+10,-0.2,col=2,cex=0.5,arr.length=0.1)
#text(85-6,23+10,"true coefficient", pos=2, cex=0.7,col=1)
#text(86.5-6,33+10, "fitted coefficient", pos=2, cex=0.7,col=2)
text(0,50, "signal versus position\n true mean (black), fitted with nnls (green)", cex=1,col=1,pos=4, font=2)
plot(-100,-100,pch=21,col=1,bg="white",cex=0.7,type="l",lwd=2,
xaxt = "n", yaxt = "n",
ylab="", xlab = "",
ylim=c(0,max(coef(fit)))*dnorm(0,0,sig),xlim=c(0,n),bty="n")
#lines(t,X %*% coef,lwd=2,col=2)
for (i in 1:n) {
if (coef[i] > 0) {
lines(t,X[,i]*coef[i],lty=1)
}
if (coef(fit)[i+1] > 0) {
# lines(t,X[,i]*coef(fit)[i+1],col=2,lty=1)
}
if (coef(fit2)[i+1] > 0) {
lines(t,X[,i]*coef(fit2)[i+1],col=3,lty=1)
}
}
text(0,33, "illustration of seperate components/curves", cex=1,col=1,pos=4, font=2)