Regularización en Machine Learning. Ejemplo con Python

Regularización en Machine Learning. Ejemplo con Python

5 junio 2023 0 Por Alvaro

La regularización es una técnica utilizada en machine learning para evitar el sobreajuste (overfitting) de los modelos. El sobreajuste ocurre cuando un modelo se ajusta demasiado a los datos de entrenamiento y pierde la capacidad de generalizar para nuevos datos. Regularizar los modelos nos ayuda a reducir la complejidad del modelo y a evitar el sobreajuste.

Existen diferentes técnicas de regularización, pero las más comunes son la regularización L1 (Lasso) y la regularización L2 (Ridge). Ambas técnicas añaden un término de penalización a la función de coste que se minimiza durante el entrenamiento del modelo.

La regularización L1 añade un término de penalización proporcional a la suma de los valores absolutos de los coeficientes del modelo. Esto tiene el efecto de forzar algunos coeficientes a cero, lo que puede ser útil para realizar una selección de variables y eliminar las menos relevantes. La función de coste con regularización L1 se define como:

$$J(w) = MSE(w) + \alpha \cdot ||w||_1$$

Donde MSE(w) es la función de coste sin regularización, α es el parámetro de regularización y ||w||_1 es la norma L1 de los coeficientes del modelo.

La regularización L2 añade un término de penalización proporcional a la suma de los cuadrados de los coeficientes del modelo. Esto tiene el efecto de reducir los valores de los coeficientes, lo que puede ayudar a evitar el sobreajuste. La función de coste con regularización L2 se define como:

$$J(w) = MSE(w) + \alpha \cdot ||w||_2^2$$

Donde MSE(w) es la función de coste sin regularización, α es el parámetro de regularización y ||w||_2 es la norma L2 de los coeficientes del modelo.

Ejemplo con Python y Sklearn

Para ilustrar cómo se puede implementar la regularización en Python utilizando la librería Sklearn, vamos a utilizar un conjunto de datos de precios de viviendas en Boston. El objetivo es predecir el precio de una vivienda en función de diferentes características, como el número de habitaciones, la tasa de criminalidad en el vecindario, etc.

Primero, cargamos los datos y los dividimos en conjuntos de entrenamiento y prueba:

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split

boston = load_boston()
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2, random_state=42)

A continuación, importamos los modelos de regresión lineal con regularización L1 y L2:

from sklearn.linear_model import Lasso, Ridge

Entrenamos los modelos utilizando los datos de entrenamiento:

lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)
ridge = Ridge(alpha=0.1)
ridge.fit(X_train, y_train)

Podemos evaluar el rendimiento de los modelos utilizando el conjunto de prueba y calculando el error cuadrático medio (MSE):

from sklearn.metrics import mean_squared_error

lasso_pred = lasso.predict(X_test)
lasso_mse = mean_squared_error(y_test, lasso_pred)
ridge_pred = ridge.predict(X_test)
ridge_mse = mean_squared_error(y_test, ridge_pred)
print("MSE Lasso:", lasso_mse)
print("MSE Ridge:", ridge_mse)

En este ejemplo, hemos utilizado un valor de alpha de 0.1 para ambos modelos. Este valor controla la fuerza de la regularización y puede ser tuneado para obtener el mejor rendimiento del modelo.

La regularización es una técnica importante en machine learning para evitar el sobreajuste de los modelos. En este ejemplo, hemos visto cómo se puede implementar la regularización en Python utilizando la librería Sklearn y cómo se puede ajustar el valor de alpha para obtener el mejor rendimiento del modelo.

Si te ha sido de utilidad este post, te agradecería que me apoyases en Patreon (donando una cantidad aunque sea poca ya sea una vez, o apoyándome mensualmente). Tener una web, dominio, hosting, no es gratis y me apoyas a seguir ayudando con la difusión de educación libre. Apóyame en Patreon! Mil gracias!!

¿Te ha parecido útil este artículo?