Je recherche une source ouverte ou une bibliothèque existante que je peux utiliser. Autant que je sache, le paquet glmnet n'est pas très facilement extensible pour couvrir le cas non négatif. Je peux me tromper, toute personne ayant des idées très appréciées.
Par non négatif, je veux dire que tous les coefficients sont contraints d'être positifs (> 0).
Réponses:
Il
glmnet
y a l'optionque vous pouvez utiliser et qui serait le moyen approprié d'imposer des contraintes de positivité sur les coefficients ajustés et si vous définissez le paramètre
alpha
sur 1, vous ajusterez LASSO. En combinaison avec l'argument,upper.limits
vous pouvez également spécifier des contraintes de boîte. Leglmnet
package est également beaucoup plus rapide que lepenalized
package, suggéré dans une autre réponse ici.Une
Rcpp
versionglmnet
qui peut s'adapter au lasso et au filet élastique avec prise en charge des contraintes de positivité et de boîte est également en préparation et est disponible pour les tests sur https://github.com/jaredhuling/ordinisla source
Voir le package pénalisé pour une option. La vignette (PDF!) Fournie avec le package en est un exemple dans la section 3.9.
Argument essentiellement défini
positive = TRUE
dans l'appel à lapenalized()
fonction.la source
Ceci et cet article démontrent que, dans certaines conditions, un seuillage strict de la solution des moindres carrés non négatifs peut effectuer une régularisation L1 (LASSO) équivalente ou meilleure, en termes de performances. Par exemple, si votre matrice de conception ne contient que des entrées non négatives, ce qui est souvent le cas.
Cela vaut la peine d'être vérifié, car NNLS est très largement pris en charge et sera également plus facile / plus rapide à résoudre.
la source