Ridge par svd avec standardisation.
Il faudra introduire la standardisation dès l'introduction de Tikhonov avec la version inefficace de l'algorithme, celle passant par le calcul explicite de la matrice de covariance.
This commit is contained in:
parent
37661174c1
commit
9ea91c17b2
23
15_loocv.R
23
15_loocv.R
@ -1 +1,24 @@
|
|||||||
#loocv
|
#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)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user