programar - regresion lineal python pandas
RegresiĆ³n lineal restringida en Python (3)
Tengo un problema clásico de regresión lineal de la forma:
y = X b
donde y
es un vector de respuesta X
es una matriz de variables de entrada y b
es el vector de parámetros de ajuste que estoy buscando.
Python proporciona b = numpy.linalg.lstsq( X , y )
para resolver problemas de esta forma.
Sin embargo, cuando uso esto, tiendo a obtener valores extremadamente grandes o extremadamente pequeños para los componentes de b
.
Me gustaría realizar el mismo ajuste, pero restringir los valores de b
entre 0 y 255.
Parece que scipy.optimize.fmin_slsqp()
es una opción, pero me pareció extremadamente lento para el tamaño del problema que me interesa ( X
es algo así como 3375 by 1500
y, con suerte, incluso más grande).
- ¿Hay otras opciones de Python para realizar ajustes de mínimos cuadrados restringidos?
- ¿O existen rutinas de Python para realizar la Regresión de Lazo o Regresión de Ridge o algún otro método de regresión que penalice los valores de coeficiente
b
grandes?
Eche un vistazo a: http://scipy-central.org/item/17/3/pymls-solving-bounded-linear-least-squares-problems
También Openopt tiene enlaces a bvls, otro solucionador de lsq lineal acotado.
Edición: También puedes probar si scipy.optimize.nnls es suficiente.
Usted menciona que encontrará que la Regresión de Lasso o la Regresión de Cresta son aceptables. Estos y muchos otros modelos lineales restringidos están disponibles en el paquete scikit-learn . Consulta la sección de modelos lineales generalizados .
Por lo general, la restricción de los coeficientes implica algún tipo de parámetro de regularización (C o alfa), algunos de los modelos (los que terminan en CV) pueden usar la validación cruzada para establecer estos parámetros automáticamente. También puede restringir aún más los modelos para usar solo coeficientes positivos, por ejemplo, hay una opción para esto en el modelo Lasso.
scipy-optimize-leastsq-with-bound-constraints on en SO dan el número de lesssq_bounds, que son restricciones limitadas scipy lesssq + como 0 <= x_i <= 255.
(Scipy Lesssq envuelve MINPACK, una de las varias implementaciones del algoritmo Levenberg-Marquardt ampliamente utilizado , también conocido como mínimos cuadrados amortiguados.
Hay varias formas de implementar límites; leastsq_bounds es el más simple.)