Machine Learning 101 — Regresión lineal
En el mundo del Machine Learning, la regresión lineal es una de las técnicas más utilizadas. Se trata de un modelo estadístico que busca establecer una relación entre una variable dependiente y una o más variables independientes. En este artículo, analizaremos en detalle la regresión lineal, sus variantes y cómo se puede implementar en Python.
Regresión lineal simple
La regresión lineal simple es un modelo que se utiliza cuando solo hay una variable independiente. En este caso, la relación entre la variable independiente y la variable dependiente se representa mediante una línea recta. El objetivo de la regresión lineal simple es encontrar la línea que mejor se ajuste a los datos.
Para implementar la regresión lineal simple en Python, podemos utilizar la librería scikit-learn. Primero, debemos importar las librerías necesarias y cargar los datos. Luego, podemos crear el modelo y ajustarlo a los datos. Finalmente, podemos hacer predicciones utilizando el modelo.
Regresión lineal múltiple
La regresión lineal múltiple es un modelo que se utiliza cuando hay dos o más variables independientes. En este caso, la relación entre las variables independientes y la variable dependiente se representa mediante un hiperplano. El objetivo de la regresión lineal múltiple es encontrar el hiperplano que mejor se ajuste a los datos.
Aplicaciones de la regresión lineal
La regresión lineal es una técnica muy utilizada en diferentes campos, desde las finanzas hasta la medicina. A continuación, se presentan algunas de sus aplicaciones más comunes:
- Predicción de precios: La regresión lineal puede utilizarse para predecir precios de bienes y servicios en función de variables como la oferta y la demanda, la inflación y el tipo de cambio, entre otras.
- Análisis de tendencias: La regresión lineal puede utilizarse para analizar tendencias en datos históricos y predecir comportamientos futuros.
- Modelado de fenómenos físicos: La regresión lineal puede utilizarse para modelar fenómenos físicos y establecer relaciones entre variables como la temperatura, la presión y la humedad.
- Análisis de datos biológicos: La regresión lineal puede utilizarse para analizar datos biológicos y establecer relaciones entre variables como la edad, el peso y la altura.
- Análisis de datos financieros: La regresión lineal puede utilizarse para analizar datos financieros y establecer relaciones entre variables como los ingresos, los gastos y los beneficios.
Implementación de la regresión lineal
La teoría: Armando nuestro modelo de regresión lineal
En este punto tenemos que ponernos un poco matemáticos
¿Qué esperabas? Es machine learning!
En la regresión lineal simple, la relación entre las variables se modela mediante una línea recta. La línea recta se define mediante la fórmula:
y = mx + b
Donde “y” es la variable dependiente, “x” es la variable independiente, “m” es la pendiente de la línea y “b” es el sesgo(bias en ingles) en y.
La pendiente “m” se calcula mediante la fórmula:
m = (nΣxy — ΣxΣy) / (nΣx² — (Σx)²)
Donde “n” es el número de observaciones, Σxy es la suma de los productos de x e y, Σx es la suma de los valores de x, Σy es la suma de los valores de y y Σx² es la suma de los cuadrados de los valores de x.
El sesgo “b” se calcula mediante la fórmula:
b = (Σy — mΣx) / n
Una vez que se ha calculado la pendiente y el sesgo, se puede utilizar la línea recta para hacer predicciones. La fórmula para hacer predicciones es:
y = mx + b
Donde “y” es la variable dependiente y “x” es el valor de la variable independiente para el cual se desea hacer una predicción.
La teoría: ¿Que tan bueno es nuestro modelo?
Ya tenemos nuestro modelo y ahora debemos poder medir como se ajusta este modelo a nuestros datos, para ello necesitamos un “poquito” mas de matemática ya que tenemos que obtener nuestra función de costo
En la regresión lineal, la función de costo se define como la suma de los cuadrados de las diferencias entre los valores predichos por el modelo y los valores reales observados. Esta función se llama el error cuadrático medio (ECM) y se define matemáticamente como:
ECM = (1/n) Σ(yi — ŷi)²
Donde “n” es el número de observaciones, “yi” es el valor real de la variable dependiente en la observación “i”, y “ŷi” es el valor predicho de la variable dependiente en la observación “i”.
El objetivo de nuestro modelo es lograr que la diferencia entre los datos y el modelo sea lo mas pequeña posible, es decir, buscamos minimizar nuestra función de costo.
La técnica que se utiliza para esto es la del descenso del gradiente, como es un tema en si mismo les dejo este video de un gran divulgador de Machine Learning de habla hispana dotCSV, si quieren entrar a detalle en este tema pueden ver el video antes de la implementación
La práctica: Implementando regresión lineal en Python
A continuación les dejo como implementar este modelo en Python
import numpy as np
class LinearRegression:
def __init__(self, lr=0.001, n_iters=1000):
self.lr = lr
self.n_iters = n_iters
self.weights = None
self.bias = None
def fit(self, X, y): # Acá implementaremos el algoritmo del descenso del gradiente
# Inicializo parámetros
n_samples, n_features = X.shape
self.weights = np.zeros(n_features)
self.bias = 0
for _ in range(self.n_iters):
y_predicted = np.dot(X, self.weights) + self.bias
dw = (1/n_samples) * np.dot(X.T, (y_predicted - y))
db = (1/n_samples) * np.sum(y_predicted-y)
self.weights -= self.lr * dw
self.bias -= self.lr * db
def predict(self, X):
y_predicted = np.dot(X, self.weights) + self.bias
return y_predicted
Este código implementa la regresión lineal mediante el algoritmo de descenso del gradiente. La clase LinearRegression
tiene tres métodos:
__init__
: Este método inicializa los parámetros de la regresión lineal,lr
yn_iters
, que son la tasa de aprendizaje y el número de iteraciones, respectivamente.fit
: Este método entrena el modelo utilizando el algoritmo del descenso del gradiente para encontrar los parámetros óptimos de la regresión lineal. La función recibe los datos de entrenamientoX
yy
y, en primer lugar, inicializa los parámetrosweights
ybias
en cero. Luego, se ejecuta un ciclofor
duranten_iters
iteraciones, donde se realiza la predicción de la variable dependiente (y_predicted
) utilizando los parámetros actuales, se calculan los gradientes de los pesos (dw
) y el sesgo (db
) y se actualizan los parámetros utilizando la tasa de aprendizajelr
. Finalmente, se devuelve el modelo entrenado.predict
: Este método realiza la predicción de los datos de entradaX
utilizando los parámetrosweights
ybias
del modelo entrenado mediante la fórmula de la regresión lineal. Retorna la predicción de la variable dependiente.
En la siguiente clase podremos visualizar nuestro modelo y como se ajusta a nuestros datos
from linear_regression import LinearRegression
import matplotlib.pyplot as plt
from sklearn import datasets
import numpy as np
from sklearn.model_selection import train_test_split
X, y = datasets.make_regression(
n_samples=100, n_features=1, noise=20, random_state=4)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=1234)
# Descomentar para ver la forma de los datos
# print(X_train.shape)
# print(y_train.shape)
regressor = LinearRegression(lr=0.01)
regressor.fit(X_train, y_train)
predicted = regressor.predict(X_test)
def mse(y_true, y_predicted):
return np.mean((y_true-y_predicted)**2)
mse_value = mse(y_test, predicted)
print(mse_value)
cmap = plt.get_cmap('viridis')
y_pred_line = regressor.predict(X)
fig = plt.figure(figsize=(8, 6))
m1 = plt.scatter(X_train, y_train, color=cmap(0.9), s=10)
m2 = plt.scatter(X_test, y_test, color=cmap(0.5), s=10)
plt.plot(X, y_pred_line, color='black', linewidth=2, label="Prediction")
plt.show()
Conclusión
La regresión lineal es un modelo estadístico que busca establecer una relación entre una variable dependiente y una o más variables independientes. La regresión lineal simple se utiliza cuando solo hay una variable independiente, mientras que la regresión lineal múltiple se utiliza cuando hay dos o más variables independientes.
En cuanto a la implementación de la regresión lineal, es necesario utilizar algunas fórmulas matemáticas para obtener obtener el modelo, así como la función de costo para medir qué tan bien se ajusta el modelo a los datos.
Podes encontrar el código de esta serie en mi repo