Я ищу какой-нибудь открытый исходный код или существующую библиотеку, которую я могу использовать. Насколько я знаю, пакет glmnet не очень легко расширяется, чтобы охватить неотрицательный случай. Я могу ошибаться, Любой, у кого есть идеи, высоко ценится.
Под неотрицательным я подразумеваю, что все коэффициенты должны быть положительными (> 0).
Ответы:
В
glmnet
есть вариантчто вы можете использовать, и это было бы подходящим способом обеспечить ограничения положительности на подобранные коэффициенты, и если вы установите параметр
alpha
в 1, вы будете использовать LASSO. В сочетании с аргументомupper.limits
вы также можете указать ограничения блока.glmnet
Пакет также намного быстрее , чемpenalized
пакет, предложенный в другой ответ здесь.Rcpp
Версия ,glmnet
которая может соответствовать лассо и эластичную сеть с поддержкой позитивности и коробчатых ограничений также в процессе подготовки, и доступен для тестирования на https://github.com/jaredhuling/ordinisисточник
Смотрите штрафной пакет для одного варианта. Vignette (PDF!) , Который поставляется с пакетом имеет пример этого в разделе 3.9.
По сути установить аргумент
positive = TRUE
в вызовеpenalized()
функции.источник
Эта и эта статья демонстрируют, что при некоторых условиях жесткое определение порога неотрицательного решения наименьших квадратов может выполнять эквивалент или лучше, чем регуляризация L1 (LASSO), с точки зрения производительности. Один из примеров - если в вашей матрице дизайна есть только неотрицательные записи, что часто имеет место.
Стоит проверить, так как NNLS очень широко поддерживается и также будет легче / быстрее решать.
источник