W jaki sposób (minimalna norma) OLS może nie pasować?
W skrócie:
Parametry eksperymentalne, które korelują z (nieznanymi) parametrami w prawdziwym modelu, będą bardziej prawdopodobne do oszacowania za pomocą wysokich wartości w procedurze dopasowania minimalnej normy OLS. Wynika to z tego, że będą pasować do „modelu + hałasu”, podczas gdy inne parametry będą pasować tylko do „hałasu” (a zatem będą pasować do większej części modelu o niższej wartości współczynnika i prawdopodobnie będą miały wysoką wartość w minimalnej normie OLS).
Efekt ten zmniejszy ilość przeuczeń w procedurze dopasowania minimalnej normy OLS. Efekt jest bardziej wyraźny, jeśli dostępnych jest więcej parametrów, ponieważ wówczas bardziej prawdopodobne staje się włączenie większej części „prawdziwego modelu” do oszacowania.
Dłuższa część:
(nie jestem pewien, co tu umieścić, ponieważ kwestia nie jest dla mnie całkowicie jasna lub nie wiem z jaką precyzją odpowiedź wymaga odpowiedzi na pytanie)
Poniżej znajduje się przykład, który można łatwo zbudować i pokazuje problem. Efekt nie jest tak dziwny, a przykłady są łatwe do zrobienia.
- Wziąłem funkcji sin (ponieważ są one prostopadłe) jako zmiennep=200
- utworzył model losowy z pomiarami.
n=50
- Model jest zbudowany tylko z zmiennych, więc 190 z 200 zmiennych tworzy możliwość generowania nadmiernego dopasowania.tm=10
- współczynniki modelu są ustalane losowo
W tym przykładzie obserwujemy, że występuje pewne nadmierne dopasowanie, ale współczynniki parametrów należących do prawdziwego modelu mają wyższą wartość. Zatem R ^ 2 może mieć pewną wartość dodatnią.
Poniższy obraz (i kod do jego wygenerowania) pokazują, że nadmierne dopasowanie jest ograniczone. Kropki, które odnoszą się do modelu szacowania 200 parametrów. Czerwone kropki odnoszą się do tych parametrów, które są również obecne w „prawdziwym modelu” i widzimy, że mają wyższą wartość. Zatem istnieje pewien stopień zbliżenia się do modelu rzeczywistego i uzyskania R ^ 2 powyżej 0.
- Zauważ, że użyłem modelu ze zmiennymi ortogonalnymi (funkcje sinusoidalne). Jeśli parametry są skorelowane, mogą wystąpić w modelu o stosunkowo bardzo wysokim współczynniku i stać się bardziej karane w minimalnej normie OLS.
- Zauważ, że „zmienne ortogonalne” nie są ortogonalne, gdy weźmiemy pod uwagę dane. Wewnętrzny iloczyn wynosi tylko zero, gdy zintegrujemy całą przestrzeń a nie, gdy mamy tylko kilka próbek . Konsekwencją jest to, że nawet przy zerowym hałasu wystąpi nadmierna montażu (i ^ 2 Wartość R wydaje się zależeć od wielu czynników, oprócz szumu. Oczywiście istnieje zależność i , lecz również istotne jest to, jak wiele zmienne w prawdziwym modelu i ile z nich w dopasowanym modelu).x x n psin(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))
Skrócona technika beta w odniesieniu do regresji kalenicy
Przekształciłem kod Pythona z Amoeby w R i połączyłem oba wykresy razem. Dla każdego minimalnego oszacowania normy OLS z dodanymi zmiennymi szumu dopasowuję oszacowanie regresji grzbietu z tą samą (w przybliżeniu) l_2 dla wektora . βl2β
- Wygląda na to, że model obciętego szumu robi to samo (oblicza tylko trochę wolniej, a może nieco rzadziej).
- Jednak bez obcięcia efekt jest znacznie mniej silny.
Ta zgodność między dodawaniem parametrów a karą kalenicową niekoniecznie jest najsilniejszym mechanizmem za brakiem nadmiernego dopasowania. Widać to zwłaszcza na krzywej 1000p (na zdjęciu pytania) zbliżającej się do prawie 0,3, podczas gdy inne krzywe, z innym p, nie osiągają tego poziomu, bez względu na parametr regresji grzbietu. Dodatkowe parametry, w tym praktycznym przypadku, nie są takie same jak przesunięcie parametru grzbietu (i sądzę, że dzieje się tak, ponieważ dodatkowe parametry stworzą lepszy, bardziej kompletny model).
Parametry hałasu zmniejszają z jednej strony normę (podobnie jak regresja kalenicy), ale także wprowadzają dodatkowy hałas. Benoit Sanchez pokazuje, że na granicy, dodając wiele wielu parametrów hałasu przy mniejszym odchyleniu, ostatecznie stanie się taki sam jak regresja kalenicy (rosnąca liczba parametrów hałasu znosi się nawzajem). Ale jednocześnie wymaga znacznie więcej obliczeń (jeśli zwiększymy odchylenie szumu, aby umożliwić użycie mniejszych parametrów i przyspieszenie obliczeń, różnica stanie się większa).
Rho = 0,2
Rho = 0,4
Rho = 0,2 zwiększając wariancję parametrów hałasu do 2
przykład kodu
# 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)