Estoy usando una regresión lineal estándar usando scikit-learn en python. Sin embargo, me gustaría obligar a los pesos a ser todos positivos para cada característica (no negativa), ¿hay alguna forma de lograrlo? Estaba buscando en la documentación pero no pude encontrar una manera de lograrlo. Entiendo que puede que no obtenga la mejor solución, pero necesito que los pesos no sean negativos.
fuente
Utilizo una solución alternativa con Lasso en Scikit Learn (definitivamente no es la mejor manera de hacer las cosas, pero funciona bien). Lasso tiene un parámetro
positive
que puede establecerseTrue
y forzar los coeficientes para que sean positivos. Además, establecer el coeficiente de regularizaciónalpha
cerca de 0 hace que el lazo imite la regresión lineal sin regularización. Aquí está el código:fuente
Aquí hay un ejemplo de por qué querrías hacerlo (y aproximadamente cómo).
Tengo 3 modelos predictivos de precios de la vivienda: lineal, aumento de gradiente, red neuronal.
Quiero combinarlos en un promedio ponderado y encontrar los mejores pesos.
Ejecuto una regresión lineal y obtengo una solución con pesos como -3.1, 2.5, 1.5 y algunas intercepciones.
Entonces, lo que hago en lugar de usar sklearn es
Y obtengo pesos positivos que suman (muy cerca) de 1. En mi ejemplo, quiero que el alfa funcione mejor fuera de la muestra, así que uso LassoCV con validación cruzada.
Los documentos de sklearn indican que no debe establecer alfa a 0 por razones numéricas, sin embargo, también puede usar Lazo directo () y establecer el parámetro alfa lo más bajo posible para obtener una respuesta razonable.
fuente