OLS (มาตรฐานขั้นต่ำ) จะล้มเหลวได้อย่างไร?
ในระยะสั้น:
พารามิเตอร์การทดลองที่มีความสัมพันธ์กับพารามิเตอร์ (ไม่ทราบ) ในโมเดลจริงจะมีแนวโน้มที่จะถูกประเมินด้วยค่าสูงในขั้นตอนวิธี OLS fitting ขั้นต่ำที่น้อยที่สุด นั่นเป็นเพราะพวกเขาจะพอดีกับ 'รุ่น + เสียง' ในขณะที่พารามิเตอร์อื่น ๆ จะพอดีกับ 'เสียง' (ดังนั้นพวกเขาจะพอดีส่วนใหญ่ของรูปแบบที่มีค่าต่ำกว่าค่าสัมประสิทธิ์และมีแนวโน้มที่จะมีค่าสูง ใน norm น้อยที่สุด OLS)
ผลกระทบนี้จะช่วยลดปริมาณการบรรจุเกินในกระบวนการ OLS fitting ขั้นต่ำสุด เอฟเฟกต์เด่นชัดมากขึ้นหากมีพารามิเตอร์มากขึ้นนับตั้งแต่นั้นมามีแนวโน้มที่ส่วนใหญ่ของ 'โมเดลจริง' จะถูกรวมเข้าในการประมาณ
ส่วนอีกต่อไป:
(ฉันไม่แน่ใจว่าจะทำอะไรที่นี่เนื่องจากปัญหาไม่ชัดเจนสำหรับฉันหรือฉันไม่รู้ว่าคำตอบที่แม่นยำต้องตอบคำถามนี้อย่างไร)
ด้านล่างเป็นตัวอย่างที่สามารถสร้างได้ง่ายและแสดงให้เห็นถึงปัญหา ผลที่ได้ไม่แปลกและตัวอย่างง่าย ๆ
- ฉันเอาฟังก์ชันบาป (เพราะมันตั้งฉาก) เป็นตัวแปรp=200
- สร้างโมเดลสุ่มด้วยการวัด
n=50
- ตัวแบบถูกสร้างขึ้นด้วยเท่านั้นของตัวแปรดังนั้น 190 ของ 200 ตัวแปรกำลังสร้างความเป็นไปได้ในการสร้างการปรับตัวที่มากเกินไปtm=10
- สัมประสิทธิ์รูปแบบจะถูกกำหนดแบบสุ่ม
ในกรณีตัวอย่างนี้เราสังเกตว่ามีบางส่วนที่เกินความเหมาะสม แต่ค่าสัมประสิทธิ์ของพารามิเตอร์ที่เป็นของตัวแบบที่แท้จริงมีค่าสูงกว่า ดังนั้น R ^ 2 อาจมีค่าเป็นบวก
ภาพด้านล่าง (และรหัสที่ใช้สร้าง) แสดงให้เห็นว่าอุปกรณ์มีข้อ จำกัด มากเกินไป จุดที่เกี่ยวข้องกับตัวแบบการประมาณค่าของพารามิเตอร์ 200 ตัว จุดสีแดงเกี่ยวข้องกับพารามิเตอร์เหล่านั้นที่มีอยู่ใน 'แบบจำลองที่แท้จริง' และเราเห็นว่ามีค่าสูงกว่า ดังนั้นจึงมีระดับของการเข้าใกล้โมเดลจริงและรับ R ^ 2 ด้านบน 0
- โปรดทราบว่าฉันใช้โมเดลที่มีตัวแปรมุมฉาก (ฟังก์ชันไซน์) หากพารามิเตอร์มีความสัมพันธ์กันพวกเขาอาจเกิดขึ้นในรูปแบบที่มีค่าสัมประสิทธิ์ค่อนข้างสูงมากและกลายเป็นถูกลงโทษมากขึ้นในบรรทัดฐานน้อยที่สุด OLS
- โปรดทราบว่า 'ตัวแปรมุมฉาก' ไม่ใช่มุมฉากเมื่อเราพิจารณาข้อมูล ผลิตภัณฑ์ภายในของเป็นเพียงศูนย์เมื่อเรารวมพื้นที่ทั้งหมดของและไม่ได้เมื่อเรามีเพียงไม่กี่ตัวอย่างxผลที่ตามมาคือถึงแม้จะไม่มีสัญญาณรบกวนก็ตามการปรับแต่งที่มากเกินไปจะเกิดขึ้น (และค่า R ^ 2 ดูเหมือนจะขึ้นอยู่กับปัจจัยหลายอย่างนอกเหนือจากสัญญาณรบกวนแน่นอนว่ามีความสัมพันธ์และแต่สิ่งสำคัญคือจำนวนตัวแปร ในรูปแบบที่แท้จริงและจำนวนของพวกเขาอยู่ในรูปแบบที่เหมาะสม)sin(ax)⋅sin(bx)xxnp
library(MASS)
par(mar=c(5.1, 4.1, 9.1, 4.1), xpd=TRUE)
p <- 200
l <- 24000
n <- 50
tm <- 10
# generate i sinus vectors as possible parameters
t <- c(1:l)
xm <- sapply(c(0:(p-1)), FUN = function(x) sin(x*t/l*2*pi))
# generate random model by selecting only tm parameters
sel <- sample(1:p, tm)
coef <- rnorm(tm, 2, 0.5)
# generate random data xv and yv with n samples
xv <- sample(t, n)
yv <- xm[xv, sel] %*% coef + rnorm(n, 0, 0.1)
# generate model
M <- ginv(t(xm[xv,]) %*% xm[xv,])
Bsol <- M %*% t(xm[xv,]) %*% yv
ysol <- xm[xv,] %*% Bsol
# plotting comparision of model with true model
plot(1:p, Bsol, ylim=c(min(Bsol,coef),max(Bsol,coef)))
points(sel, Bsol[sel], col=1, bg=2, pch=21)
points(sel,coef,pch=3,col=2)
title("comparing overfitted model (circles) with true model (crosses)",line=5)
legend(0,max(coef,Bsol)+0.55,c("all 100 estimated coefficients","the 10 estimated coefficients corresponding to true model","true coefficient values"),pch=c(21,21,3),pt.bg=c(0,2,0),col=c(1,1,2))
เทคนิคเบต้าที่ถูกตัดทอนเกี่ยวกับการถดถอยของสันเขา
ฉันได้แปลงรหัสไพ ธ อนจากอะมีบาเป็น R และรวมกราฟสองตัวเข้าด้วยกัน สำหรับการประมาณค่า OLS ของ norm norm ขั้นต่ำแต่ละอันพร้อมกับเพิ่มเสียงรบกวนฉันจับคู่ค่าประมาณการถดถอยแบบ ridge ด้วยค่าเดิม (โดยประมาณ) -norm สำหรับ vector vectorl2β
- ดูเหมือนว่าแบบจำลองเสียงที่ถูกตัดทอนจะทำแบบเดียวกันมาก (คำนวณได้ช้ากว่านิดหน่อยและอาจจะดีขึ้นอีกเล็กน้อย)
- อย่างไรก็ตามหากไม่มีการตัดทอนผลกระทบจะรุนแรงน้อยลง
การติดต่อกันระหว่างการเพิ่มพารามิเตอร์และการปรับริดจ์แบบนี้ไม่จำเป็นต้องเป็นกลไกที่แข็งแกร่งที่สุดหากไม่มีการกระชับ สิ่งนี้สามารถเห็นได้โดยเฉพาะในโค้ง 1,000p (ในภาพของคำถาม) ไปเกือบ 0.3 ในขณะที่อีกเส้นโค้งที่มี p แตกต่างกันไม่ถึงระดับนี้ไม่ว่าพารามิเตอร์การถดถอยของสันคืออะไร พารามิเตอร์เพิ่มเติมในกรณีที่ใช้งานจริงนั้นไม่เหมือนกับการเปลี่ยนแปลงของพารามิเตอร์สัน (และฉันเดาว่านี่เป็นเพราะพารามิเตอร์พิเศษจะสร้างแบบจำลองที่ดีกว่าสมบูรณ์มากขึ้น)
พารามิเตอร์เสียงรบกวนลดบรรทัดฐานในมือข้างหนึ่ง (เช่นเดียวกับการถดถอยสัน) แต่ยังแนะนำเสียงเพิ่มเติม เบอนัวต์ซานเชซแสดงให้เห็นว่าในขีด จำกัด การเพิ่มพารามิเตอร์เสียงจำนวนมากที่มีความเบี่ยงเบนน้อยลงในที่สุดมันก็จะกลายเป็นเช่นเดียวกับการถดถอยของสันเขา แต่ในขณะเดียวกันก็ต้องใช้การคำนวณมากขึ้น (ถ้าเราเพิ่มความเบี่ยงเบนของเสียงเพื่ออนุญาตให้ใช้พารามิเตอร์น้อยลงและเร่งความเร็วในการคำนวณความแตกต่างก็จะยิ่งใหญ่ขึ้น)
Rho = 0.2
Rho = 0.4
Rho = 0.2 เพิ่มความแปรปรวนของพารามิเตอร์เสียงเป็น 2
ตัวอย่างรหัส
# prepare the data
set.seed(42)
n = 80
p = 40
rho = .2
y = rnorm(n,0,1)
X = matrix(rep(y,p), ncol = p)*rho + rnorm(n*p,0,1)*(1-rho^2)
# range of variables to add
ps = c(0, 5, 10, 15, 20, 40, 45, 50, 55, 60, 70, 80, 100, 125, 150, 175, 200, 300, 400, 500, 1000)
#ps = c(0, 5, 10, 15, 20, 40, 60, 80, 100, 150, 200, 300) #,500,1000)
# variables to store output (the sse)
error = matrix(0,nrow=n, ncol=length(ps))
error_t = matrix(0,nrow=n, ncol=length(ps))
error_s = matrix(0,nrow=n, ncol=length(ps))
# adding a progression bar
pb <- txtProgressBar(min = 0, max = n, style = 3)
# training set by leaving out measurement 1, repeat n times
for (fold in 1:n) {
indtrain = c(1:n)[-fold]
# ridge regression
beta_s <- glmnet(X[indtrain,],y[indtrain],alpha=0,lambda = 10^c(seq(-4,2,by=0.01)))$beta
# calculate l2-norm to compare with adding variables
l2_bs <- colSums(beta_s^2)
for (pi in 1:length(ps)) {
XX = cbind(X, matrix(rnorm(n*ps[pi],0,1), nrow=80))
XXt = XX[indtrain,]
if (p+ps[pi] < n) {
beta = solve(t(XXt) %*% (XXt)) %*% t(XXt) %*% y[indtrain]
}
else {
beta = ginv(t(XXt) %*% (XXt)) %*% t(XXt) %*% y[indtrain]
}
# pickout comparable ridge regression with the same l2 norm
l2_b <- sum(beta[1:p]^2)
beta_shrink <- beta_s[,which.min((l2_b-l2_bs)^2)]
# compute errors
error[fold, pi] = y[fold] - XX[fold,1:p] %*% beta[1:p]
error_t[fold, pi] = y[fold] - XX[fold,] %*% beta[]
error_s[fold, pi] = y[fold] - XX[fold,1:p] %*% beta_shrink[]
}
setTxtProgressBar(pb, fold) # update progression bar
}
# plotting
plot(ps,colSums(error^2)/sum(y^2) ,
ylim = c(0,2),
xlab ="Number of extra predictors",
ylab ="relative sum of squared error")
lines(ps,colSums(error^2)/sum(y^2))
points(ps,colSums(error_t^2)/sum(y^2),col=2)
lines(ps,colSums(error_t^2)/sum(y^2),col=2)
points(ps,colSums(error_s^2)/sum(y^2),col=4)
lines(ps,colSums(error_s^2)/sum(y^2),col=4)
title('Extra pure noise predictors')
legend(200,2,c("complete model with p + extra predictors",
"truncated model with p + extra predictors",
"ridge regression with similar l2-norm",
"idealized model uniform beta with 1/p/rho"),
pch=c(1,1,1,NA), col=c(2,1,4,1),lt=c(1,1,1,2))
# idealized model (if we put all beta to 1/rho/p we should theoretically have a reasonable good model)
error_op <- rep(0,n)
for (fold in 1:n) {
beta = rep(1/rho/p,p)
error_op[fold] = y[fold] - X[fold,] %*% beta
}
id <- sum(error_op^2)/sum(y^2)
lines(range(ps),rep(id,2),lty=2)