J'ai essayé de créer une fonction Randomized Lasso dans R mais cela ne semble pas générer les mêmes résultats que la fonction lasso aléatoire Python sklearn. J'applique la même philosophie ici mais je ne pouvais pas comprendre la différence. Le code a été modifié basé sur ce code: randomized lasso function in R.lasso randomisé dans R
Voici les données de code et de l'échantillon:
# generate synthetic data
set.seed(100)
size = 750
x = matrix(runif(14*size),ncol=14)
y = 10 * sin(pi*X[,1]*X[,2]) + 20*(X[,3]-0.5)**2 + 10*X[,4] + 5*X[,5] + runif(1,0,1)
nbootstrap = 200
nsteps = 20
alpha = 0.2
dimx <- dim(x)
n <- dimx[1]
p <- dimx[2]
halfsize <- as.integer(n/2)
freq <- matrix(0,1,p)
for (i in seq(nbootstrap)) {
# Randomly reweight each variable
xs <- t(t(x)*runif(p,alpha,1))
# Ramdomly split the sample in two sets
perm <- sample(dimx[1])
i1 <- perm[1:halfsize]
i2 <- perm[(halfsize+1):n]
# run the randomized lasso on each sample and check which variables are selected
cv_lasso <- lars::cv.lars(xs[i1,],y[i1],plot.it=FALSE, mode = 'step')
idx <- which.max(cv_lasso$cv - cv_lasso$cv.error <= min(cv_lasso$cv))
coef.lasso <- coef(lars::lars(xs[i1,],y[i1]))[idx,]
freq <- freq + abs(sign(coef.lasso))
cv_lasso <- lars::cv.lars(xs[i2,],y[i2],plot.it=FALSE, mode = 'step')
idx <- which.max(cv_lasso$cv - cv_lasso$cv.error <= min(cv_lasso$cv))
coef.lasso <- coef(lars::lars(xs[i1,],y[i1]))[idx,]
freq <- freq + abs(sign(coef.lasso))
print(freq)
}
# normalize frequence in [0,1]
freq <- freq/(2*nbootstrap)
Les résultats devraient être comparables à semblables aux résultats présentés dans ce tableau (stabilité) stability in python. Cependant, cette approche et l'émission de code R d'origine dans la première référence de lien hypertexte n'a pas trouvé les caractéristiques corrélées X11 à X14. Je ne sais pas quelle partie ne fonctionne pas correctement dans mon code R.
Bien sûr. Lira la ligne directrice pour les questions futures. –