Estou procurando algum código-fonte aberto ou uma biblioteca existente que eu possa usar. Tanto quanto eu digo, o pacote glmnet não é muito facilmente extensível para cobrir o caso não negativo. Posso estar errado, qualquer pessoa com alguma idéia muito apreciada.
Por não negativo, quero dizer que todos os coeficientes são restritos a serem positivos (> 0).
Respostas:
Dentro
glmnet
existe a opçãoque você pode usar e que seria a maneira apropriada de impor restrições de positividade aos coeficientes ajustados e se você definir o parâmetro
alpha
como 1, estará ajustando o LASSO. Em combinação com o argumento,upper.limits
você também pode especificar restrições de caixa. Oglmnet
pacote também é muito mais rápido que openalized
pacote, sugerido em outra resposta aqui.Também está em preparação uma
Rcpp
versãoglmnet
disso que pode ajustar o laço e a rede elástica com suporte para restrições de positividade e caixa, e está disponível para teste em https://github.com/jaredhuling/ordinisfonte
Veja o pacote penalizado para uma opção. A vinheta (PDF!) Que acompanha o pacote tem um exemplo disso na seção 3.9.
Defina essencialmente o argumento
positive = TRUE
na chamada para apenalized()
função.fonte
Isso e isso artigo demonstram que, em algumas condições, o limiar rígido da solução de mínimos quadrados não negativos pode ter desempenho equivalente ou melhor que a regularização L1 (LASSO), em termos de desempenho. Um exemplo é se sua matriz de design possui apenas entradas não negativas, o que geralmente ocorre.
Vale a pena conferir, pois o NNLS é amplamente suportado e também será mais fácil / rápido de resolver.
fonte