Regresión lineal multivariable
Clase 8 de 18 • Curso de Regresión Lineal con Python y scikit-learn
Contenido del curso
Clase 8 de 18 • Curso de Regresión Lineal con Python y scikit-learn
Contenido del curso
Rafael Arteaga
RAUL SERGIO ESPEJO TICONA
Juan R. Vergara M.
Hugo Montoya Diaz
Juan R. Vergara M.
Diego Jurado
Cristian Enrique Cuevas Mercado
Jhon Freddy Tavera Blandon
Antonio Demarco Bonino
Carlos Jared Martínez León
Johnny Campiño
Víctor Trigo
David Carrillo Castillo
ANDRES DAVID CRISTANCHO MACIAS
Mario Alexander Vargas Celis
Dick Saide Suárez Blanco
Camilo Andrés Rojas Hernández
Dave Sanchfor
Orlando Ramirez
Luis Valle
Fidel Parabacuto
Ruddy Ivan Claros Fernandez
Víctor Trigo
Dick Saide Suárez Blanco
Camilo Andrés Rojas Hernández
Julián Cárdenas
Rubén Darío Albarracin Caro
La regresión lineal múltiple es la gran técnica estadística para comprobar hipótesis y relaciones explicativas
Notar que: X = df[['RM','INDUS']].values y = df['MEDV'].values.reshape(-1,1) StandardScaler acepta arreglos de 2 dimensiones razon por la cual ya no usamos el reshape(-1,1)
Gracias, me ayudó.
👍
Gracias!
En la regresion lineal múltiple hay que considerar que las variables independientes que agregue al modelo no se encuentren altamente correlacionada eso puede implicar en problemas de multicolinealidad
La regresión lineal multivariable es una técnica estadística utilizada para modelar la relación entre una variable dependiente y múltiples variables independientes. A diferencia de la regresión lineal simple, que involucra una única variable independiente, la regresión lineal multivariable considera varios predictores para predecir el valor de la variable dependiente.
++En términos matemáticos, la regresión lineal multivariable se puede expresar como:++
y = β0 + β1x1 + β2x2 + ... + βn*xn + ε Donde: y es la variable dependiente que queremos predecir. x1, x2, ..., xn son las variables independientes o predictores. β0 es el término constante o intercepto. β1, β2, ..., βn son los coeficientes que representan las pendientes de cada predictor. ε es el término de error o residual, que captura la variabilidad no explicada por el modelo.
Aquí tienes una lista de ejemplos médicos en los que se puede utilizar regresión lineal múltiple:
¿Por qué la variable 'INDUS' es la wue mejor se correlaciona? si tiene un signo negativo
El signo sólo nos indica la dirección de la relacion. Si el signo es negativo quiere decir que a medida que uno aumenta, el otro disminuye. Lo importante es la magnitud absoluta.
Mientras más cercano a 1 o -1 sea el coeficiente de correlación más relacionadas están las variables, si es cercano a 0, se dice que son linealmente independientes. Cercano a 1 significa relación lineal positiva (o directamente proporcional). Cercano a -1 significa relación lineal negativa (o inversamente proporcional).
La regresión lineal Multivariable, tiene mucha aplicación en series temporales, por ejemplo en industrias, donde tienes que calcular densidades de fluidos, pero estos varían por la presión, temperatura y velocidad del fluido.
Ahora, tu podrías mejorar tu predicción, utilizando diferentes modelos de regresión, por ejemplo puede ser la lineal, exponencial de diferentes grados, la cuadrática, logarítmica, etc … Analizando los valores del error cuadrático medio y R2, podemos notar cual modelo se ajusta mejor para nuestra pedicción con los datos que tenemos
Noté que el modelo empieza a predecir precios negativos cuando haces el ejercicio con número de habitaciones por debajo de 4. Y esto se debe a que la regresión lineal funciona muy bien para predecir valores que están dentro del dominio de las variables del modelo de entrenamiento.
En este caso el modelo solo aprendió con número de habitaciones desde 3.561 hasta 8.78, lo puedes verificar en el dataset.
# Ver el rango de habitaciones en el dataset original print(f"Mínimo de habitaciones: {df['RM'].min()}") print(f"Máximo de habitaciones: {df['RM'].max()}") print(f"Promedio de habitaciones: {df['RM'].mean()}")
Podrías hacer algo sencillo como poner una restricción para precios negativos.
indus_mean = df['INDUS'].mean() num_habitaciones = 3.0 input_features = np.array([[num_habitaciones, indus_mean]]) input_features_std = sc_x.transform(input_features) price_std = slr.predict(input_features_std) price= max(0, sc_y.inverse_transform(price_std).item()) print(f"El precio de una casa con {num_habitaciones} habitaciones es de ${price:.2f}K")
📘 Regresión Lineal Multivariable
La regresión lineal multivariable (o regresión lineal múltiple) es una extensión de la regresión lineal simple. En lugar de tener una sola variable independiente (input), se tienen dos o más variables independientes para predecir una variable dependiente.
🧮 Forma general del modelo
y=β0+β1x1+β2x2+⋯+βnxn+εy = \beta_0 + \beta_1x_1 + \beta_2x_2 + \dots + \beta_nx_n + \varepsilon
✅ ¿Cuándo usar regresión lineal multivariable?
🛠️ ¿Cómo se entrena con scikit-learn?
from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split import pandas as pd
# Supón que df tiene columnas: 'habitaciones', 'metros_cuadrados', 'precio' X = df[['habitaciones', 'metros_cuadrados']] # variables independientes y = df['precio'] # variable dependiente
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
modelo = LinearRegression() modelo.fit(X_train, y_train)
print(modelo.coef_) # Coeficientes de las variables print(modelo.intercept_) # Intercepto
📈 Evaluación
Se puede evaluar usando:
from sklearn.metrics import r2_score, mean_squared_error
y_pred = modelo.predict(X_test) print("R2:", r2_score(y_test, y_pred)) print("MSE:", mean_squared_error(y_test, y_pred))
Hola, yo tengo una pregunta, acabo de terminar el Quiz, es sobre una de las preguntas. ¿Porque no se puede aplicar una regresión lineal a un problema para saber si una imagen representa a un perro o a un gato?
En mi cabeza, tal vez pudiéramos recabar una muestra de muchas fotos de perros y gatos y asi hacer una "prediccion" (o mas bien) hacer un sistema para reconocer perros y gatos.
...Ahora que lo escribo, empieza a sonar absurdo jaja. Pero apreciaria solo ser aclarado.
Desde mi punto de vista y de los temas que se han tocado en el curso, el problema de trabajar con imágenes es que, desde mi punto de vista deberíamos de tratar cada pixel como una variable independiente, ya que como se mencionó la regresión lineal es perfecta para realizar un pequeño análisis numérico discreto o continuo, por lo cual la haría ineficiente y a la hora de realizar el modelo, lo más seguro es que su predicción no funcione :(
Porque al intentar predecir si el animal es perro o gato basicamente los estas clasificando.
creo que a este punto ya lo sabes, pero vi que nadie menciono la clasificacion.
un abrazo
Acá les comparto el código en latex para la formula
\hat{y} = w_0 + w_1 * x_1 + ... + w_n * x_n
ufff Se noto el esfuerzo en agregarle valor a la clase........
Para graficar obtienes un error por el tema de las dimensiones de ambos conjuntos. Puedes graficarlo por separado o todo en un gráfico 3Dfrom mpl_toolkits.mplot3d import Axes3Dimport matplotlib.pyplot as plt # Tu código previo aquí... # Crear una figura para un gráfico 3Dfig = plt.figure(figsize=(10, 8))ax = fig.add_subplot(111, projection='3d') # Extraer las características y la predicciónx_rm = x_std[:, 0] # RMx_indus = x_std[:, 1] # INDUSy_pred = slr.predict(x_std).ravel() # Predicción del modelo # Graficar los puntos de datosax.scatter(x_rm, x_indus, y_std, label='Datos reales', color='blue') # Graficar la superficie de predicción# Aquí, deberás crear una malla de valores para RM y INDUS y calcular los valores predichos correspondientes# Esto puede ser un poco complejo dependiendo de tu conjunto de datos y modelo # Etiquetas y títuloax.set_xlabel('RM (estandarizado)')ax.set_ylabel('INDUS (estandarizado)')ax.set_zlabel('MEDV (estandarizado)')ax.set_title('Relación 3D entre RM, INDUS y MEDV') plt.legend()plt.show()
from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt # Tu código previo aquí... # Crear una figura para un gráfico 3D fig = plt.figure(figsize=(10, 8)) ax = fig.add_subplot(111, projection='3d') # Extraer las características y la predicción x_rm = x_std[:, 0] # RM x_indus = x_std[:, 1] # INDUS y_pred = slr.predict(x_std).ravel() # Predicción del modelo # Graficar los puntos de datos ax.scatter(x_rm, x_indus, y_std, label='Datos reales', color='blue') # Graficar la superficie de predicción # Aquí, deberás crear una malla de valores para RM y INDUS y calcular los valores predichos correspondientes # Esto puede ser un poco complejo dependiendo de tu conjunto de datos y modelo # Etiquetas y título ax.set_xlabel('RM (estandarizado)') ax.set_ylabel('INDUS (estandarizado)') ax.set_zlabel('MEDV (estandarizado)') ax.set_title('Relación 3D entre RM, INDUS y MEDV') plt.legend() plt.show()
Podrian explicarme por uqe eligió "INDUS"
Porque la variable que más se correlaciona a MEDV, después de RM (utilizada para construir el modelo de regresión lineal simple) es INDUS. Esto se ve en la matriz de correlación, donde la variable más correlacionada son las que tienen este coeficiente más cercano a 1 o -1, si es cercano a 0 se dice que son linealmente independientes.
------>Regresión lineal multivariable<--------
σ Aprenderemos a usar regresion linearl con multiples varibles 1 . Well, entendi que solo agrego una "variable" reutilizando el ejemplo del principio, y en vez de que el modelo solo se use " [RM] ", puso una coma y agrego. " [INDUS] "o_o
El objeto LinearRegression, funciona para realizar tanto regresiones lineal simples como multiples, por eso tan solo añadiendo una coma y el nombre de nuestra próxima variable independiente es suficiente, pero recuerda que hay criterios y no podemos tan solo añadir variables, ya que podemos estar incumpliendo la ausencia de multicolinealidad
SÍ LES VOTA ERROR SOLO COPIEN Y PEGUEN EL SIGUIENTE CODIGO:
from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression X = df[['RM','INDUS']].values y = df['MEDV'].values.reshape(-1, 1) sc_x = StandardScaler() sc_y = StandardScaler() X_std = sc_x.fit_transform(X) y_std = sc_y.fit_transform(y) slr = LinearRegression() slr.fit(X_std, y_std)
Si requieren el codigo para que puedan utilizarlo, pueden usr este: #la primera línea lleva doble corchete porque en el ejemplo s usa como tupla pero hay que usarlo como dataframe x = df[['RM', 'INDUS']].values y = df['MEDV'].values.reshape(-1, 1)
sc_x = StandardScaler() sc_y = StandardScaler()
x_std = sc_x.fit_transform(x) y_std = sc_y.fit_transform(y)
slr = LinearRegression() slr.fit(x_std, y_std)