Escolhendo o alfa ideal na regressão logística líquida elástica

22

Estou executando uma regressão logística de rede elástica em um conjunto de dados de assistência médica usando o glmnetpacote 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 :0.01.00.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

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.1942612alpha=0.8

É seguro ir com alpha=0.8? Ou, dada a variação, devo executar novamente cv.glmnetcom 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?2010αalpha=0.01.0

RobertF
fonte
5
Você gostaria de dar uma olhada no caretpacote que pode repetir cv e ajustar tanto alpha quanto lambda (suporta processamento multicore!). De memória, acho que a glmnetdocumentaçã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 por cv.glmnet.
1
Ah, encontrei este post aqui: stats.stackexchange.com/questions/69638/…
RobertF
2
não se esqueça de fixar o foldid quando você está tentando diferente α
user4581
1
Para reprodutibilidade, nunca execute cv.glmnet()sem passar foldidscriado a partir de uma semente aleatória conhecida.
smci 24/02
1
@amoeba, dê uma olhada na minha resposta - comentários sobre as compensações entre l1 e l2 são bem-vindos!
Xavier Bourret Sicotte

Respostas:

7

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

minβ0,β1Ni=1Nwil(yi,β0+βTxi)+λ[(1α)||β||22/2+α||β||1]

Sklearn usa

minw12Ni=1N||yXw||22+α×l1ratio||w||1+0.5×α×(1l1ratio)×||w||22

Existem parametrizações alternativos que utilizam a e b , bem ..

Para evitar confusão, eu vou ligar

  • λ o parâmetro de força da penalidade
  • L 1L1ratio a relação entre apenalidadeL1 eL2 , variando de 0 (cumeeira) a 1 (laço)

Visualizando o Impacto dos Parâmetros

Considere um conjunto de dados simulados em que y 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 diferentes L1 parâmetros de razão, como uma função de λ o parâmetro de resistência.

  • Para ambas as simulações: quando λ=0 , a solução é a solução OLS no canto inferior direito, com a função de custo em forma de vale associada.
  • À medida que λ aumenta, a regularização entra em ação e a solução tende a (0,0)
  • A principal diferença entre as duas simulações é o parâmetro da razão L1 .
  • L1
  • L1
  • L1

enter image description here


Compreendendo o efeito dos parâmetros

O ElasticNet foi introduzido para combater algumas das limitações do Lasso, que são:

  • pnp>nn
  • Lasso falha ao executar a seleção agrupada, especialmente na presença de variáveis ​​correlacionadas. Tende a selecionar uma variável de um grupo e ignorar as outras

L1L2

  • L1
  • L2L1

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)

enter image description here

Leitura adicional

Xavier Bourret Sicotte
fonte
2

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.

  1. αkf1,...,fkf(x)=1kifi(x)f(x)=i=1kfi(x)k

  2. 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 GridSearchCVdetalhes das lojas sobre os vencimentos das dobras em cv_results_( veja aqui ).

  3. αL1αL2

uberwach
fonte