Яким чином (мінімальна норма) OLS не може перевиконати?
Коротко:
Експериментальні параметри, що співвідносяться з (невідомими) параметрами в справжній моделі, швидше за все, будуть оцінені з високими значеннями в процедурі встановлення мінімальної норми OLS. Це тому, що вони відповідатимуть «модель + шум», тоді як інші параметри підходять лише до «шуму» (таким чином, вони помістять більшу частину моделі з меншим значенням коефіцієнта і, швидше за все, мають високе значення в мінімальній нормі OLS).
Цей ефект дозволить зменшити кількість надягання при мінімальній нормі OLS-процедури. Ефект є більш вираженим, якщо доступно більше параметрів, оскільки з тих пір стає більшою ймовірність, що більша частина "справжньої моделі" буде включена в оцінку.
Довша частина:
(Я не впевнений, що тут розмістити, оскільки питання мені не зовсім зрозуміло, або я не знаю, до якої точності потрібно відповісти, щоб вирішити питання)
Нижче наводиться приклад, який легко побудувати і демонструє проблему. Ефект не такий дивний, і приклади легко зробити.
- Я взяв sin-функцій (оскільки вони перпендикулярні) як змінніp=200
- створили випадкову модель з вимірювань.
n=50
- Модель побудована лише з змінних, тому 190 із 200 змінних створюють можливість генерувати надмірні розміри.tm=10
- модельні коефіцієнти визначаються випадковим чином
У цьому прикладі ми бачимо, що є деяка перевиконання, але коефіцієнти параметрів, що належать до справжньої моделі, мають більш високе значення. Таким чином, R ^ 2 може мати деяке позитивне значення.
Зображення нижче (та код для його створення) демонструють, що надмірне розміщення обмежене. Точки, які стосуються моделі оцінки 200 параметрів. Червоні точки відносяться до тих параметрів, які також є у "справжній моделі", і ми бачимо, що вони мають більш високе значення. Таким чином, існує деякий ступінь наближення до реальної моделі та отримання R ^ 2 вище 0.
- Зауважимо, що я використовував модель з ортогональними змінними (синусо-функції). Якщо параметри співвідносяться, вони можуть виникати в моделі з відносно дуже високим коефіцієнтом і ставати більш покараними при мінімальній нормі OLS.
- Зауважимо, що "ортогональні змінні" не є ортогональними, коли ми розглядаємо дані. Внутрішній добуток дорівнює лише нулю, коли ми інтегруємо весь простір а не тоді, коли у нас є лише кілька зразків . Наслідком цього є те, що навіть при нульовому шумі відбудеться перезміщення (а здається, що значення 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 з доданими змінними шуму я співпадаю з оцінкою регресії хребта з однаковим (приблизно) -нормом для вектора .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)