16

I tiene un problema classic linear regresión de la forma:constreñido de regresión lineal en Python

y = X b

donde y es un vector respuestaX es una matriz de variables de entrada y b es el vector de ajustar los parámetros que estoy buscando.

Python proporciona b = numpy.linalg.lstsq(X , y) para la solución de problemas de esta forma.

Sin embargo, cuando uso esto, suelo obtener valores extremadamente grandes o extremadamente pequeños para los componentes de b.

me gustaría realizar la misma forma, 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 I' m interesado en (X es algo así como 3375 by 1500 y con suerte aún más grande).

  1. ¿Hay alguna otra opción de Python para realizar ajustes de cuadrados menos restringidos ?
  2. ¿O hay rutinas de pitón para realizar Lasso Regression o Ridge Regression o algún otro método de regresión que penaliza valores de coeficientes grandes b?

Respuesta

8

Tenga una mirada en: http://scipy-central.org/item/17/3/pymls-solving-bounded-linear-least-squares-problems

también Openopt tiene enlaces con bvls, otro acotado solucionador de LSQ lineal.

Editar: También podría intentar si scipy.optimize.nnls es suficiente.

+0

Agradable, en la superficie que suena exactamente lo que necesito.Ser capaz de proporcionar pesos a las filas de la matriz de variables de entrada 'X' también puede ser muy útil para mí (tengo una idea de la fiabilidad de varios puntos de datos que me pueden permitir aprovechar). Definitivamente voy a intentarlo, ¡gracias! – ulmangt

+0

No está realmente bien probado, espero que funcione para usted. El código es puro pitón y debería ser fácil de probar. – tillsten

+0

'scipy.opimize.nnls' es un buen consejo también. Simplemente restringir a valores no negativos puede ser suficiente. Las soluciones 'numpy.linalg.lstsq' parecían equilibrar enormes valores' b' positivos con valores 'b' negativos igualmente grandes. – ulmangt

9

Menciona que encontrará que Lasso Regression o Ridge Regression son aceptables. Estos y muchos otros modelos lineales restringidos están disponibles en el paquete scikit-learn. Consulte el section on generalized linear models.

Normalmente, restringir 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 automáticamente estos parámetros. 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 de Lasso.

Cuestiones relacionadas