2021-11-28 17:04:52 -05:00
|
|
|
#loocv
|
|
|
|
|
|
|
|
# Résolution d'un système linéaire correspondant à la matrice de Gram pour
|
|
|
|
# un polynôme de degré fixé et avec l'ajout d'un facteur de régularisation en
|
|
|
|
# norme L2 dont l'importance est contrôlée par l'hyperparamètre alpha.
|
|
|
|
ridge.gram <- function(alpha, data, degre) {
|
2021-11-30 12:44:47 -05:00
|
|
|
A <- scale(outer(c(data$X), 1:degre, "^"))
|
|
|
|
Y <- data$Y
|
|
|
|
Ym <- mean(Y)
|
|
|
|
Y <- Y - Ym
|
2021-11-28 17:04:52 -05:00
|
|
|
gram <- t(A) %*% A
|
|
|
|
diag(gram) <- diag(gram) + alpha
|
2021-11-30 12:44:47 -05:00
|
|
|
coef <- solve(gram, as.vector(t(A) %*% Y))
|
|
|
|
coef <- coef / attr(A,"scaled:scale")
|
|
|
|
inter <- Ym - coef %*% attr(A,"scaled:center")
|
|
|
|
coef <- c(inter, coef)
|
2021-11-28 17:04:52 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
ridge.svd <- function(alpha, data, degre) {
|
|
|
|
A <- scale(outer(c(data$X), 1:degre, "^"))
|
|
|
|
Y <- data$Y
|
|
|
|
Ym <- mean(Y)
|
|
|
|
Y <- Y - Ym
|
|
|
|
As <- svd(A)
|
|
|
|
d <- As$d
|
|
|
|
coef <- c(As$v %*% ((d / (d^2 + alpha)) * (t(As$u) %*% Y)))
|
|
|
|
coef <- coef / attr(A,"scaled:scale")
|
|
|
|
inter <- Ym - coef %*% attr(A,"scaled:center")
|
|
|
|
coef <- c(inter, coef)
|
|
|
|
}
|