J'effectue une régression logistique net élastique sur un ensemble de données de soins de santé en utilisant le glmnet
package dans R en sélectionnant les valeurs lambda sur une grille de de 0 à 1. Mon code abrégé est ci-dessous:
alphalist <- seq(0,1,by=0.1)
elasticnet <- lapply(alphalist, function(a){
cv.glmnet(x, y, alpha=a, family="binomial", lambda.min.ratio=.001)
})
for (i in 1:11) {print(min(elasticnet[[i]]$cvm))}
qui génère l'erreur moyenne de validation croisée pour chaque valeur de alpha de à avec un incrément de :1,0 0,1
[1] 0.2080167
[1] 0.1947478
[1] 0.1949832
[1] 0.1946211
[1] 0.1947906
[1] 0.1953286
[1] 0.194827
[1] 0.1944735
[1] 0.1942612
[1] 0.1944079
[1] 0.1948874
Sur la base de ce que j'ai lu dans la littérature, le choix optimal de est l'endroit où l'erreur cv est minimisée. Mais il y a beaucoup de variation dans les erreurs sur la gamme des alphas. Je vois plusieurs minimums locaux, avec une erreur minimum globale de for .0.1942612
alpha=0.8
Est-il sûr d'y aller alpha=0.8
? Ou, étant donné la variation, dois-je réexécuter cv.glmnet
avec plus de plis de validation croisée (par exemple au lieu de ) ou peut-être un plus grand nombre d' incréments entre et pour obtenir une image claire du chemin d'erreur cv?10 αalpha=0.0
1.0
caret
paquetage qui peut faire des cv et des réglages répétés pour alpha et lambda (prend en charge le traitement multicœur!). De mémoire, je pense que laglmnet
documentation déconseille de régler l'alpha comme vous le faites ici. Il recommande de conserver les plis fixes si l'utilisateur ajuste l'alpha en plus de l'ajustement de lambda fourni parcv.glmnet
.cv.glmnet()
sans passer parfoldids
créé à partir d'une graine aléatoire connue.Réponses:
Clarification de la signification des paramètresα et Elastic Net
Différentes terminologies et paramètres sont utilisés par différents packages, mais la signification est généralement la même:
Le package R Glmnet utilise la définition suivante
Sklearn utilise
Il existe également des paramétrisations alternatives utilisant et ..une b
Pour éviter toute confusion, je vais appeler
Visualiser l'impact des paramètres
Considérons un ensemble de données simulées où compose d'une courbe sinusoïdale bruyante et est une caractéristique bidimensionnelle composée de et . En raison de la corrélation entre et la fonction de coût est une vallée étroite.y X X1=x X2=x2 X1 X2
Les graphiques ci-dessous illustrent le chemin de solution de la régression élastique avec deux paramètres de rapport différents , en fonction de λ le paramètre de résistance.L1 λ
Comprendre l'effet des paramètres
L'ElasticNet a été introduit pour contrer certaines des limites du Lasso qui sont:
En combinant une pénalité et une pénalité quadratique , nous obtenons les avantages des deux:L1 L2
Vous pouvez le voir visuellement sur le diagramme ci-dessus, les singularités au niveau des sommets encouragent la rareté , tandis que les bords convexes stricts encouragent le regroupement .
Voici une visualisation tirée de Hastie (l'inventeur d'ElasticNet)
Lectures complémentaires
la source
Permettez-moi d'ajouter quelques remarques très pratiques malgré l'âge de la question. Comme je ne suis pas un utilisateur R, je ne peux pas laisser le code parler, mais il doit néanmoins être compréhensible.
Un des avantages du rééchantillonnage est que vous pouvez inspecter la séquence des résultats des tests, qui sont les scores du cv. Vous devez toujours non seulement regarder la moyenne mais la déviation std (ce n'est pas une distribution normale, mais vous agissez comme si). Habituellement, vous affichez ce chiffre à 65,5% (± 2,57%) pour la précision. De cette façon, vous pouvez dire si les "petites déviations" sont plus susceptibles d'être dues au hasard ou structurellement. Mieux serait même d'inspecter les séquences complètes . S'il y a toujours un repli pour une raison quelconque, vous voudrez peut-être repenser la façon dont vous effectuez votre fractionnement (cela suggère une conception expérimentale défectueuse, également: avez-vous mélangé?). Dans scikit, découvrez les
GridSearchCV
détails des magasins sur les délais de pliagecv_results_
( voir ici ).la source