Estoy buscando un código abierto o una biblioteca existente que pueda usar. Por lo que digo, el paquete glmnet no es fácilmente extensible para cubrir el caso no negativo. Puedo estar equivocado, cualquiera con alguna idea muy apreciada.
Por no negativo quiero decir que todos los coeficientes están limitados a ser positivos (> 0).
Respuestas:
En
glmnet
existe la opciónque puede usar y que sería la forma adecuada de imponer restricciones de positividad en los coeficientes ajustados y si establece el parámetro
alpha
en 1, ajustará LASSO. En combinación con el argumentoupper.limits
, también puede especificar restricciones de cuadro. Elglmnet
paquete también es mucho más rápido que elpenalized
paquete, sugerido en otra respuesta aquí.También se está preparando una
Rcpp
versión deglmnet
eso que puede ajustarse al lazo y la red elástica con soporte para positividad y restricciones de caja, y está disponible para pruebas en https://github.com/jaredhuling/ordinisfuente
Vea el paquete penalizado para una opción. La viñeta (PDF) que viene con el paquete tiene un ejemplo de esto en la sección 3.9.
Esencialmente establezca el argumento
positive = TRUE
en la llamada a lapenalized()
función.fuente
Esto y este documento demuestran que, en algunas condiciones, la determinación de umbrales duros de la solución de mínimos cuadrados no negativos puede tener un rendimiento equivalente o mejor que la regularización L1 (LASSO), en términos de rendimiento. Un ejemplo es si su matriz de diseño solo tiene entradas no negativas, que a menudo es el caso.
Vale la pena echarle un vistazo, ya que NNLS es muy compatible y también será más fácil / rápido de resolver.
fuente