कैसे (न्यूनतम आदर्श) OLS ओवरफिट करने में विफल हो सकता है?
संक्षेप में:
प्रायोगिक मापदंडों जो सच्चे मॉडल में (अज्ञात) मापदंडों के साथ संबंध रखते हैं, न्यूनतम मानदंड OLS फिटिंग प्रक्रिया में उच्च मूल्यों के साथ अनुमान लगाने की अधिक संभावना होगी। ऐसा इसलिए है क्योंकि वे 'मॉडल + शोर' फिट करेंगे, जबकि अन्य पैरामीटर केवल 'शोर' फिट करेंगे (इस प्रकार वे मॉडल के एक बड़े हिस्से को गुणांक के कम मूल्य के साथ फिट करेंगे और उच्च मूल्य होने की अधिक संभावना है न्यूनतम मानक OLS में)।
यह प्रभाव न्यूनतम मानक ओएलएस फिटिंग प्रक्रिया में ओवरफिटिंग की मात्रा को कम करेगा। प्रभाव अधिक स्पष्ट है यदि अधिक पैरामीटर उपलब्ध हैं तब से यह अधिक संभावना हो जाती है कि अनुमान में 'सच मॉडल' का एक बड़ा हिस्सा शामिल किया जा रहा है।
अधिक लम्बा हिस्सा:
(मुझे यकीन नहीं है कि मुझे यहाँ क्या करना है क्योंकि यह मुद्दा मेरे लिए पूरी तरह से स्पष्ट नहीं है, या मुझे नहीं पता कि प्रश्न को संबोधित करने के लिए उत्तर को कितनी सटीकता की आवश्यकता है)
नीचे एक उदाहरण है जिसे आसानी से बनाया जा सकता है और समस्या को प्रदर्शित कर सकता है। प्रभाव इतना अजीब नहीं है और उदाहरण बनाना आसान है।
- मैंने चर के रूप में पाप-कार्य किए (क्योंकि वे लंबवत हैं)p=200
- माप के साथ एक यादृच्छिक मॉडल बनाया ।
n=50
- मॉडल का निर्माण केवल चर के साथ किया गया है, इसलिए 200 में से 190 चर ओवर-फिटिंग उत्पन्न करने की संभावना पैदा कर रहे हैं।tm=10
- मॉडल गुणांक बेतरतीब ढंग से निर्धारित कर रहे हैं
इस उदाहरण के मामले में हम मानते हैं कि कुछ अति-फिटिंग है लेकिन सच्चे मॉडल से संबंधित मापदंडों के गुणांक का अधिक मूल्य है। इस प्रकार आर ^ 2 का कुछ सकारात्मक मूल्य हो सकता है।
नीचे दी गई छवि (और इसे उत्पन्न करने के लिए कोड) प्रदर्शित करती है कि ओवर-फिटिंग सीमित है। डॉट्स जो 200 मापदंडों के अनुमान मॉडल से संबंधित हैं। लाल बिंदु उन मापदंडों से संबंधित हैं जो 'सही मॉडल' में भी मौजूद हैं और हम देखते हैं कि उनका मूल्य अधिक है। इस प्रकार, वास्तविक मॉडल से संपर्क करने और 0 से ऊपर R ^ 2 प्राप्त करने की कुछ डिग्री है।
- ध्यान दें कि मैंने ऑर्थोगोनल चर (साइन-फ़ंक्शंस) के साथ एक मॉडल का उपयोग किया था। यदि मापदंडों को सहसंबद्ध किया जाता है, तो वे अपेक्षाकृत उच्च गुणांक वाले मॉडल में हो सकते हैं और न्यूनतम मानक OLS में अधिक दंडित हो सकते हैं।
- ध्यान दें कि जब हम डेटा पर विचार करते हैं तो 'ऑर्थोगोनल चर' ऑर्थोगोनल नहीं होते हैं। जब हम के संपूर्ण स्थान को एकीकृत करते हैं तब का आंतरिक उत्पाद केवल शून्य होता है, जब हमारे पास केवल कुछ नमूने । परिणाम यह है कि शून्य शोर के साथ भी ओवर-फिटिंग होगी (और आर ^ 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))
रिज प्रतिगमन के संबंध में काटे गए बीटा तकनीक
मैंने अमीबा से अजगर कोड को आर में बदल दिया है और दो ग्राफ को एक साथ जोड़ दिया है। जोड़े गए शोर चर के साथ प्रत्येक न्यूनतम मानक OLS अनुमान के लिए मैं एक ही (लगभग) -norm के साथ एक रिज प्रतिगमन अनुमान का मिलान वेक्टर के लिए करता हूं । βl2β
- ऐसा लगता है कि छंटे हुए शोर मॉडल बहुत कुछ करता है (केवल थोड़ा धीमा गणना करता है, और शायद थोड़ा अधिक अक्सर कम अच्छा होता है)।
- हालांकि छंटनी के बिना प्रभाव बहुत कम मजबूत होता है।
मापदंडों और रिज दंड को जोड़ने के बीच यह पत्राचार जरूरी नहीं कि अति-फिटिंग की अनुपस्थिति के पीछे सबसे मजबूत तंत्र है। यह विशेष रूप से 1000 पी वक्र में देखा जा सकता है (प्रश्न की छवि में) लगभग 0.3 पर जा रहा है जबकि अन्य घटता, अलग-अलग पी के साथ, इस स्तर तक नहीं पहुंचता है, चाहे कोई भी रिज प्रतिगमन पैरामीटर हो। अतिरिक्त पैरामीटर, उस व्यावहारिक मामले में, रिज पैरामीटर की एक शिफ्ट के समान नहीं हैं (और मुझे लगता है कि यह इसलिए है क्योंकि अतिरिक्त पैरामीटर एक बेहतर, अधिक पूर्ण, मॉडल बनाएंगे)।
शोर पैरामीटर एक हाथ पर मानक को कम करते हैं (सिर्फ रिज रिग्रेशन की तरह) लेकिन अतिरिक्त शोर का भी परिचय देते हैं। बेनोइट सांचेज़ से पता चलता है कि सीमा में, कई विचलन मापदंडों को छोटे विचलन के साथ जोड़ते हुए, यह अंततः रिज प्रतिगमन (शोर मापदंडों की बढ़ती संख्या एक दूसरे को रद्द करने के समान) हो जाएगा। लेकिन एक ही समय में, इसे और अधिक संगणना की आवश्यकता होती है (यदि हम शोर के विचलन को बढ़ाते हैं, कम मापदंडों का उपयोग करने और गणना की गति बढ़ाने के लिए, अंतर बड़ा हो जाता है)।
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)