Parece que no puedo encontrar ninguna biblioteca de Python que haga regresión múltiple. Las únicas cosas que encuentro solo hacen una regresión simple. Necesito retroceder mi variable dependiente (y) contra varias variables independientes (x1, x2, x3, etc.).
Por ejemplo, con estos datos:
print 'y x1 x2 x3 x4 x5 x6 x7'
for t in texts:
print "{:>7.1f}{:>10.2f}{:>9.2f}{:>9.2f}{:>10.2f}{:>7.2f}{:>7.2f}{:>9.2f}" /
.format(t.y,t.x1,t.x2,t.x3,t.x4,t.x5,t.x6,t.x7)
(salida para arriba :)
y x1 x2 x3 x4 x5 x6 x7
-6.0 -4.95 -5.87 -0.76 14.73 4.02 0.20 0.45
-5.0 -4.55 -4.52 -0.71 13.74 4.47 0.16 0.50
-10.0 -10.96 -11.64 -0.98 15.49 4.18 0.19 0.53
-5.0 -1.08 -3.36 0.75 24.72 4.96 0.16 0.60
-8.0 -6.52 -7.45 -0.86 16.59 4.29 0.10 0.48
-3.0 -0.81 -2.36 -0.50 22.44 4.81 0.15 0.53
-6.0 -7.01 -7.33 -0.33 13.93 4.32 0.21 0.50
-8.0 -4.46 -7.65 -0.94 11.40 4.43 0.16 0.49
-8.0 -11.54 -10.03 -1.03 18.18 4.28 0.21 0.55
¿Cómo haría retroceder estos en python, para obtener la fórmula de regresión lineal:
Y = a1x1 + a2x2 + a3x3 + a4x4 + a5x5 + a6x6 + + a7x7 + c
Y
pueden estar correlacionadas entre sí, pero asumir que la independencia no modela con precisión el conjunto de datos.Respuestas:
sklearn.linear_model.LinearRegression
lo haré:Entonces
clf.coef_
tendrá los coeficientes de regresión.sklearn.linear_model
También tiene interfaces similares para hacer varios tipos de regularizaciones en la regresión.fuente
score
método lo hará;sklearn.metrics
tiene algunos otros criterios de evaluación del modelo. Si quieres cosas como en la respuesta de Akavall, statsmodels tiene más diagnósticos similares a R.Aquí hay un poco de trabajo que creé. Lo revisé con R y funciona correctamente.
Resultado:
Salida:
pandas
proporciona una forma conveniente de ejecutar OLS como se indica en esta respuesta:Ejecute una regresión de OLS con el marco de datos de Pandas
fuente
reg_m
función es innecesariamente complicada.x = np.array(x).T
,x = sm.add_constant(x)
Yresults = sm.OLS(endog=y, exog=x).fit()
es suficiente.x = x[::-1]
dentro de la definición de función para obtener el orden correctocoef +- 2 * std err
(en realidad, la distribución de Student-t parametrizada por los grados de libertad en los residuos). es decir, los valores de t absolutos más grandes implican CI más lejos de cero, pero no deben compararse directamente. la aclaración es un poco tarde, pero espero que sea útil para alguienSolo para aclarar, el ejemplo que dio es la regresión lineal múltiple , no la referencia de regresión lineal multivariante . Diferencia :
En breve:
(Otra fuente ).
fuente
Puede usar numpy.linalg.lstsq :
Resultado:
Puede ver la salida estimada con:
Resultado:
fuente
Uso
scipy.optimize.curve_fit
. Y no solo para ajuste lineal.fuente
Una vez que convierta sus datos en un marco de datos de pandas (
df
),El término de intercepción se incluye por defecto.
Vea este cuaderno para más ejemplos.
fuente
Creo que esta puede ser la forma más fácil de terminar este trabajo:
fuente
La regresión lineal múltiple se puede manejar utilizando la biblioteca sklearn como se mencionó anteriormente. Estoy usando la instalación Anaconda de Python 3.6.
Crea tu modelo de la siguiente manera:
fuente
Puedes usar numpy.linalg.lstsq
fuente
Puede usar la siguiente función y pasarle un DataFrame:
fuente
Scikit-learn es una biblioteca de aprendizaje automático para Python que puede hacer este trabajo por usted. Simplemente importe el módulo sklearn.linear_model a su script.
Encuentre la plantilla de código para Regresión lineal múltiple usando sklearn en Python:
Eso es. Puede usar este código como plantilla para implementar Regresión lineal múltiple en cualquier conjunto de datos. Para una mejor comprensión con un ejemplo, visite: Regresión lineal con un ejemplo
fuente
Aquí hay un método alternativo y básico:
En lugar de
sm.OLS
usted también puede usarsm.Logit
osm.Probit
y etc.fuente