intro_to_ml/03_tikhonov_code.R

17 lines
595 B
R

# 03 Tikhonov
# 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 <- function(alpha, data, degre) {
A <- scale(outer(c(data$X), 1:degre, "^"))
Y <- data$Y
Ym <- mean(Y)
Y <- Y - Ym
gram <- t(A) %*% A
diag(gram) <- diag(gram) + alpha
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)
}