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:
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:
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),
- 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 .
Respostas:
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.
fonte
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).
fonte
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
O IRLS para o problema do LASSO é o seguinte:
fonte