Introduction de la standardisation des variables explicatives dans l'inférence des paramètres de la régression Ridge par construction explicite de la matrice de Gram. La version de l'inférence qui utilise le SVD donne bien les mêmes paramètres pour une même valeur de l'hyperparamètre de régularisation.

This commit is contained in:
Pierre-Edouard Portier 2021-11-30 18:44:47 +01:00
parent 8d94107206
commit 3c181c2c78

View File

@ -4,10 +4,16 @@
# un polynôme de degré fixé et avec l'ajout d'un facteur de régularisation en # 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. # norme L2 dont l'importance est contrôlée par l'hyperparamètre alpha.
ridge.gram <- function(alpha, data, degre) { ridge.gram <- function(alpha, data, degre) {
A <- outer(c(data$X), 0:degre, "^") A <- scale(outer(c(data$X), 1:degre, "^"))
Y <- data$Y
Ym <- mean(Y)
Y <- Y - Ym
gram <- t(A) %*% A gram <- t(A) %*% A
diag(gram) <- diag(gram) + alpha diag(gram) <- diag(gram) + alpha
solve(gram, as.vector(t(A) %*% data$Y)) 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)
} }
ridge.svd <- function(alpha, data, degre) { ridge.svd <- function(alpha, data, degre) {