Каким образом (минимальная норма) МНК может не соответствовать?
Короче говоря:
Экспериментальные параметры, которые коррелируют с (неизвестными) параметрами в истинной модели, с большей вероятностью будут оцениваться с высокими значениями в процедуре подбора OLS с минимальной нормой. Это потому, что они будут соответствовать «модель + шум», тогда как другие параметры будут соответствовать только «шуму» (таким образом, они будут соответствовать большей части модели с более низким значением коэффициента и с большей вероятностью будут иметь высокое значение в минимальной норме мсл).
Этот эффект уменьшит количество переоснащения в минимальной норме процедуры подбора OLS. Эффект становится более выраженным, если доступно больше параметров, так как тогда становится более вероятным включение большей части «истинной модели» в оценку.
Более длинная часть:
(Я не уверен, что здесь разместить, так как проблема не совсем ясна для меня, или я не знаю, с какой точностью ответ должен ответить на вопрос)
Ниже приведен пример, который может быть легко построен и демонстрирует проблему. Эффект не так уж странен, и примеры легко сделать.
- р = 200
- n = 50
- т м = 10
- коэффициенты модели определяются случайным образом
В этом примере мы видим, что есть некоторая перестройка, но коэффициенты параметров, которые принадлежат истинной модели, имеют более высокое значение. Таким образом, R ^ 2 может иметь некоторое положительное значение.
Изображение ниже (и код для его генерации) демонстрируют, что перенастройка ограничена. Точки, которые относятся к модели оценки 200 параметров. Красные точки относятся к тем параметрам, которые также присутствуют в «истинной модели», и мы видим, что они имеют более высокое значение. Таким образом, существует некоторая степень приближения к реальной модели и получения R ^ 2 выше 0.
- Обратите внимание, что я использовал модель с ортогональными переменными (синус-функции). Если параметры коррелируют, то они могут встречаться в модели с относительно очень высоким коэффициентом и становиться более наказуемыми при минимальной норме OLS.
- s i n ( a x ) ⋅ s i n ( b x )ИксИксNп
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))
Усеченная бета-техника в отношении регрессии гребня
L2β
- Кажется, что модель усеченного шума делает то же самое (только вычисляет немного медленнее, а может быть, чуть чаще и хуже).
- Однако без усечения эффект гораздо менее сильный.
Это соответствие между добавлением параметров и штрафом за гребень не обязательно является самым сильным механизмом отсутствия перенастройки. Это особенно заметно на кривой 1000p (на изображении вопроса), доходящей почти до 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)