# Séparer le jeu de données en un jeu d'entraînement et un jeu de validation. # INPUT : jeu de données initial et proportion des données conservées pour # l'entraînement. xvalpart <- function(data,p) { n <- nrow(data$X) nentr <- round(p*n) entridx <- sample(1:n, nentr, replace=FALSE) list(entr = list(X = data$X[entridx,,drop=FALSE], Y = data$Y[entridx]), valid = list(X = data$X[-entridx,,drop=FALSE], Y = data$Y[-entridx])) } # Découper le jeu de données initial en entraînement et validation. # Pour chaque valeur proposée de l'hyperparamètre alpha d'une régression ridge, # apprendre un modèle sur le jeu d'entraînement. # Retourner les coefficients du meilleur modèle avec la moyenne de la valeur # absolue des erreurs commises par ce modèle sur le jeu de validation. # La fonction ridge est défini dans le code source de la partie 3. xvalridge <- function(alphas, data, degre, p) { tmp <- xvalpart(data,p) lcoef <- sapply(alphas, ridge, tmp$entr, degre) pred <- sapply(split(lcoef,col(lcoef)), polyeval, tmp$valid$X) meanabserrs <- colMeans(abs(pred - tmp$valid$Y)) minmeanabserr <- min(meanabserrs) minidx <- which(meanabserrs == minmeanabserr) list(meanabserr = minmeanabserr, coef = lcoef[,minidx], alpha = alphas[minidx]) }