From 9ea91c17b2781d91c2baaaa60b8a3f98a9b98409 Mon Sep 17 00:00:00 2001 From: Pierre-Edouard Portier Date: Sun, 28 Nov 2021 23:04:52 +0100 Subject: [PATCH] =?UTF-8?q?Ridge=20par=20svd=20avec=20standardisation.=20I?= =?UTF-8?q?l=20faudra=20introduire=20la=20standardisation=20d=C3=A8s=20l'i?= =?UTF-8?q?ntroduction=20de=20Tikhonov=20avec=20la=20version=20inefficace?= =?UTF-8?q?=20de=20l'algorithme,=20celle=20passant=20par=20le=20calcul=20e?= =?UTF-8?q?xplicite=20de=20la=20matrice=20de=20covariance.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 15_loocv.R | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) 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