Como estimar o parâmetro de retração no Lasso ou na regressão de crista com variáveis> 50K?

36

Quero usar a regressão Lasso ou cume para um modelo com mais de 50.000 variáveis. Quero fazê-lo usando o pacote de software em R. Como posso estimar o parâmetro de encolhimento ( )?λ

Edições:

Aqui está o ponto que eu cheguei:

set.seed (123)
Y <- runif (1000)
Xv <- sample(c(1,0), size= 1000*1000,  replace = T)
X <- matrix(Xv, nrow = 1000, ncol = 1000)

mydf <- data.frame(Y, X)

require(MASS)
lm.ridge(Y ~ ., mydf)

plot(lm.ridge(Y ~ ., mydf,
              lambda = seq(0,0.1,0.001)))

insira a descrição da imagem aqui

Minha pergunta é: Como sei qual é melhor para o meu modelo?λ

John
fonte
3
O parâmetro de suavização não é estatisticamente estimado, mas está sendo usado para maximizar o ajuste fora da amostra usando, por exemplo, validação cruzada. Eu acho que os pacotes padrão para LASSO e Ridge Regression no R incorporaram funcionalidades para fazer isso por você - você já olhou para isso?
Macro
4
Eu discordo - você pode estimar o parâmetro de suavização usando uma abordagem de modelo misto. Os métodos Reml existem como os métodos heirárquicos de bayes. Você não precisa de validação cruzada cara.
probabilityislogic
1
@probabilityislogic obrigado pela informação. Seria ótimo se há poucos detalhes sobre roteiro como podemos fazer isso usando REML
John
2
Para a regressão em cordilheira, a validação cruzada de exclusão única é essencialmente gratuita (estatística PRESS de Allen) e eu achei que era um método razoavelmente bom. No entanto, com recursos desta forma, praticamente qualquer método usado será instável e uma abordagem totalmente bayesiana que marginaliza os parâmetros e os parâmetros de regularização provavelmente será uma solução mais confiável (como eu acho que o probabilityislogic estava sugerindo). Se você não gosta dos métodos bayesianos, use ensacamento e reestime o lambda de cada vez.
Dikran Marsupial
2
@ Macro - (nada como uma resposta 18 meses depois). Na abordagem de modelo misto, existem dois termos adicionais que dependem apenas de mas não de . Estes são eonde é o número de betas e X a matriz preditora. O primeiro termo vem de que é variação de erro. O segundo termo é uma correção REML para explicar a incerteza ao conectar . β - k log ( λ ) log | X T X + λ I | k β ~ N ( 0 , σ 2 λ - 1 ) σ 2 β = βλβklog(λ)log|XTX+λI|kβN(0,σ2λ1)σ2β=β^
probabilityislogic

Respostas:

25

A função cv.glmnetdo pacote R glmnet faz a validação cruzada automática em uma grade de valores usada para problemas de regressão normalizados . Em particular, para o laço. O pacote glmnet também suporta a penalidade líquida elástica mais geral , que é uma combinação das e . A partir da versão 1.7.3. do pacote que parâmetro igual a 0 fornece regressão de crista (pelo menos, essa funcionalidade não foi documentada até recentemente).1 1 2 αλ112α

A validação cruzada é uma estimativa do erro de generalização esperado para cada e podem ser escolhidos como o minimizador dessa estimativa. A função retorna dois valores de . O minimizador, e o sempre maior , que é uma opção heurística de produzindo um modelo menos complexo, para o qual o desempenho em termos de erro de generalização esperado estimado está dentro de um erro padrão do mínimo. Diferentes opções de funções de perda para medir o erro de generalização são possíveis no pacote glmnet. O argumento especifica a função de perda.λ λ λλλcv.glmnetλlambda.minlambda.1seλtype.measure

Como alternativa, o pacote R mgcv contém amplas possibilidades de estimativa com penalização quadrática, incluindo seleção automática dos parâmetros de penalidade. Os métodos implementados incluem validação cruzada generalizada e REML, conforme mencionado em um comentário. Mais detalhes podem ser encontrados no livro dos autores do pacote: Wood, SN (2006) Modelos Aditivos Generalizados: uma introdução ao R, CRC.

NRH
fonte
1
Você provavelmente pode querer acrescentar que cv.glmnetretorna dois valores para , e ( “one-padrão de erro” regra). λlambda.minlambda.1se
chl
@ chl, obrigado pela sugestão. Eu deveria ter acrescentado isso.
NRH 17/04
15

Esta resposta é específica do MATLAB, no entanto, os conceitos básicos devem ser bastante semelhantes ao que você está acostumado com R ...

No caso do MATLAB, você tem a opção de executar o laço com a validação cruzada ativada.

Se você fizer isso, a função laço reportará dois valores críticos de parâmetros

  1. O valor lambda que minimiza o erro quadrático médio validado por cruzamento
  2. O valor lambda com a maior quantidade de retração cujo CVMSE está dentro de um erro padrão do mínimo.

Você também recebe um gráfico pequeno e agradável que pode ser usado para inspecionar a relação entre lambda e CVMSE

insira a descrição da imagem aqui

Em geral, você escolhe um valor de lambda que fica entre a linha azul e a linha verde.

A postagem do blog a seguir inclui algum código de demonstração com base em alguns exemplos em

Tibshirani, R. (1996). Retração e seleção de regressão através do laço. J. Royal. Statist. Soc B., vol. 58, No. 1, páginas 267-288).

http://blogs.mathworks.com/loren/2011/11/29/subset-selection-and-regularization-part-2/

Richard Willey
fonte