Como aplicar o método IRLS (Ireitative Squee Squared Squares) ao modelo LASSO?

12

Programei uma regressão logística usando o algoritmo IRLS . Gostaria de aplicar uma penalização do LASSO para selecionar automaticamente os recursos corretos. A cada iteração, o seguinte é resolvido:

(XTWX)δβ^=XT(yp)

Seja λ um número real não negativo. Não estou penalizando a interceptação, como sugerido em Os elementos de. Aprendizagem Estatística . O mesmo vale para os coeficientes já nulos. Caso contrário, subtraio um termo do lado direito:

XT(yp)λ×sign(β^)

No entanto, não tenho certeza sobre a modificação do algoritmo IRLS. É o caminho certo a fazer?


Edit: Embora eu não estava confiante sobre isso, aqui está uma das soluções que finalmente surgiu. O interessante é que essa solução corresponde ao que agora entendo sobre o LASSO. De fato, existem duas etapas em cada iteração, em vez de apenas uma:

  • o primeiro passo é o mesmo de antes: fazemos uma iteração do algoritmo (como se na fórmula do gradiente acima),λ=0
  • o segundo passo é o novo: aplicamos um limiar suave a cada componente (exceto o componente , que corresponde à interceptação) do vetor obtido na primeira etapa. Isso é chamado de algoritmo iterativo de limiar suave .β0β

i1,βisign(βi)×max(0,|βi|λ)
Wok
fonte
Ainda não foi possível obter uma convergência melhor adaptando o IRLS. : '(
Wok

Respostas:

12

Esse problema geralmente é resolvido pelo ajuste por descida de coordenadas ( veja aqui ). Esse método é tanto mais seguro quanto mais eficiente numericamente, algoritmicamente mais fácil de implementar e aplicável a uma matriz mais geral de modelos (incluindo também a regressão de Cox). Uma implementação R está disponível no pacote R glmnet . Os códigos são de código aberto (parcialmente em e em C, parcialmente em R), para que você possa usá-los como blueprints.

user603
fonte
@wok É importante notar que o pacote scikit.learn também oferece uma implementação eficiente em Python para esse tipo de coisa.
chl
O algoritmo de descida de coordenadas é interessante. Obrigado. Ainda pensando nisso.
Wok
5

A função de perda do LASSO tem uma descontinuidade em zero ao longo de cada eixo, então o IRLS terá problemas com ela. Eu achei uma abordagem do tipo otimização mínima seqüencial (SMO) muito eficaz, veja por exemplo

http://bioinformatics.oxfordjournals.org/content/19/17/2246

uma versão com o software MATLAB é

http://bioinformatics.oxfordjournals.org/content/22/19/2348

o software está disponível aqui:

http://theoval.cmp.uea.ac.uk/~gcc/cbl/blogreg/

A idéia básica é otimizar os coeficientes um de cada vez e testar se você cruza a descontinuidade um coeficiente de cada vez, o que é fácil, pois você está realizando uma otimização escalar. Pode parecer lento, mas na verdade é bastante eficiente (embora eu espere que algoritmos melhores tenham sido desenvolvidos desde então - provavelmente por Keerthi ou Chih-Jen Lin, que são os principais especialistas nesse tipo de coisa).

Dikran Marsupial
fonte
Obrigado. Estou lendo isso e pensando sobre isso. No entanto, isso seria uma enorme modificação do algoritmo atual.
Wok
4

Você pode verificar o artigo: Regressão logística eficiente regularizada por L1, que é um algoritmo baseado em IRLS para LASSO. Em relação à implementação, o link pode ser útil para você (http://ai.stanford.edu/~silee/softwares/irlslars.htm).


fonte
0

O IRLS para o problema do LASSO é o seguinte:

argminx12Axb22+λx1=argminx12Axb22+λxTWx

WWi,i=1|xi|
x1=i|xi|=ixi2|xi|


WxxTWxxxdiag(sign(x))Wx

xk+1=(ATA+λWk)1ATb

Wi,iK=1|xik|

W=I

λ

Royi
fonte