diff --git a/15_loocv.R b/15_loocv.R index aef1bf8..03b6635 100644 --- a/15_loocv.R +++ b/15_loocv.R @@ -1 +1,24 @@ -#loocv \ No newline at end of file +#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) { + A <- outer(c(data$X), 0:degre, "^") + gram <- t(A) %*% A + diag(gram) <- diag(gram) + alpha + solve(gram, as.vector(t(A) %*% data$Y)) +} + +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) +} \ No newline at end of file