Ich suche Open Source oder eine vorhandene Bibliothek, die ich nutzen kann. Soweit ich weiß, ist das glmnet-Paket nicht sehr einfach zu erweitern, um den nicht negativen Fall abzudecken. Ich kann mich irren, jeder mit irgendwelchen Ideen sehr geschätzt.
Mit nicht negativ meine ich, dass alle Koeffizienten positiv sein müssen (> 0).
Antworten:
Darin
glmnet
besteht die MöglichkeitDies ist die geeignete Methode, um die Positivitätsbeschränkungen für die angepassten Koeffizienten durchzusetzen. Wenn Sie den Parameter
alpha
auf 1 setzen, passen Sie LASSO an. In Kombination mit dem Argument könnenupper.limits
Sie auch Box-Einschränkungen festlegen. Dasglmnet
Paket ist auch viel schneller als daspenalized
Paket, was in einer anderen Antwort hier vorgeschlagen wird.Eine
Rcpp
Version davonglmnet
, die für das Lasso und das elastische Netz mit Unterstützung für Positivität und Box-Einschränkungen geeignet ist, befindet sich ebenfalls in Vorbereitung und kann unter https://github.com/jaredhuling/ordinis getestet werdenquelle
Siehe das bestrafte Paket für eine Option. Ein Beispiel für die mitgelieferte Vignette (PDF!) Finden Sie in Abschnitt 3.9.
Stellen Sie
positive = TRUE
im Aufruf derpenalized()
Funktion im Wesentlichen das Argument ein .quelle
Dies und dieses Papier zeigen, dass unter bestimmten Bedingungen eine harte Schwellwertbildung der nicht-negativen Lösung der kleinsten Quadrate in Bezug auf die Leistung gleich oder besser als die L1-Regularisierung (LASSO) sein kann. Ein Beispiel ist, wenn Ihre Entwurfsmatrix nur nicht negative Einträge enthält, was häufig der Fall ist.
Es lohnt sich herauszufinden, da NNLS sehr weit verbreitet ist und auch einfacher / schneller zu lösen sein wird.
quelle