Estou executando uma regressão logística de rede elástica em um conjunto de dados de assistência médica usando o glmnet
pacote em R selecionando valores lambda em uma grade de de 0 a 1. Meu código abreviado está abaixo:
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))}
que gera o erro cruzado médio validado para cada valor de alfa de a com um incremento de :
[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
Com base no que li na literatura, a escolha ideal de é onde o erro cv é minimizado. Mas há muita variação nos erros no intervalo de alfas. Estou vendo vários mínimos locais, com um erro mínimo global de para .0.1942612
alpha=0.8
É seguro ir com alpha=0.8
? Ou, dada a variação, devo executar novamente cv.glmnet
com mais dobras de validação cruzada (por exemplo, vez de ) ou talvez um número maior de incrementos de entre e para obter uma imagem clara do caminho do erro cv?alpha=0.0
1.0
caret
pacote que pode repetir cv e ajustar tanto alpha quanto lambda (suporta processamento multicore!). De memória, acho que aglmnet
documentação desaconselha o ajuste do alfa da maneira que você faz aqui. Ele recomenda manter os foldids fixos se o usuário estiver ajustando para alfa, além do ajuste para lambda fornecido porcv.glmnet
.cv.glmnet()
sem passarfoldids
criado a partir de uma semente aleatória conhecida.Respostas:
Esclarecendo o significado de parâmetrosα e Elastic Net
Terminologia e parâmetros diferentes são usados por pacotes diferentes, mas o significado geralmente é o mesmo:
O pacote R Glmnet usa a seguinte definição
Sklearn usa
Existem parametrizações alternativos que utilizama e b , bem ..
Para evitar confusão, eu vou ligar
Visualizando o Impacto dos Parâmetros
Considere um conjunto de dados simulados em quey consiste em uma curva senoidal barulhenta e X é um recurso bidimensional que consiste em X1=x e X2=x2 . Devido à correlação entre X1 e X2 a função de custo é um vale estreito.
Os gráficos abaixo ilustram o caminho solução de elasticnet regressão com dois diferentesL1 parâmetros de razão, como uma função de λ o parâmetro de resistência.
Compreendendo o efeito dos parâmetros
O ElasticNet foi introduzido para combater algumas das limitações do Lasso, que são:
Você pode ver isso visualmente no diagrama acima, as singularidades nos vértices incentivam a dispersão , enquanto as arestas convexas estritas incentivam o agrupamento .
Aqui está uma visualização tirada de Hastie (o inventor do ElasticNet)
Leitura adicional
fonte
Deixe-me acrescentar algumas observações muito práticas, apesar da idade da pergunta. Como não sou usuário de R, não posso deixar o código falar, mas deve ser compreensível.
Uma vantagem da reamostragem é que você pode inspecionar a sequência das pontuações dos testes, que são as pontuações da cv. Você deve sempre olhar não apenas a média, mas também o desvio padrão (não é uma distribuição normal, mas você age como se). Normalmente, você exibe esta palavra como 65,5% (± 2,57%) para precisão. Dessa forma, você pode saber se os "pequenos desvios" têm maior probabilidade de serem por acaso ou estruturalmente. Melhor seria mesmo inspecionar as seqüências completas . Se sempre houver uma dobra por algum motivo, convém repensar a maneira como está fazendo sua divisão (isso indica um projeto experimental defeituoso, também: você embaralhou?). No scikit-learn, os
GridSearchCV
detalhes das lojas sobre os vencimentos das dobras emcv_results_
( veja aqui ).fonte