Un modelo lineal regularizado (regularized linear model) es una versión de un modelo lineal que incluye un elemento en su función para evitar el sobreajuste (overfitting) y mejorar la capacidad de aprendizaje del modelo.
En términos generales, un modelo lineal (como el que vimos en el módulo anterior) intenta encontrar la relación entre las variables de entrada y la variable de salida. Sin embargo, si un modelo lineal tiene demasiados parámetros o si los datos son muy ruidosos, puede suceder que el modelo se ajuste demasiado a los datos de entrenamiento, produciéndose un claro sobreajuste y que dificulta generalizar bien a nuevos datos.
Para evitar este problema, los modelos lineales regularizados añaden un término extra para penalizar los valores de los coeficientes que son demasiado grandes. Estos modelos son regresiones lineales como las vistas en el módulo anterior pero con la adición de un término de regularización. Los dos tipos de modelos son:
Ambas técnicas intentan limitar o "penalizar" el tamaño de los coeficientes del modelo. Imaginemos que estamos ajustando una línea a puntos en un gráfico:
Podemos construir un modelo lineal regularizado fácilmente en Python utilizando la librería scikit-learn
y las funciones Lasso
y Ridge
. Algunos de sus hiperparámetros más importantes y los primeros en los que debemos centrarnos son:
alpha
: Este es el hiperparámetro de regularización. Controla cuánto queremos penalizar los coeficientes altos. Un valor más alto aumenta la regularización y, por lo tanto, los coeficientes del modelo tienden a ser más pequeños. Por el contrario, un valor más bajo la reduce y permite coeficientes más altos. El valor por defecto es 1.0
y su rango de valores va desde 0.0
hasta infinito
.max_iter
: Es el número máximo de iteraciones del modelo.Otro hiperparámetro muy importante es el random_state
, que controla la semilla de generación aleatoria. Este atributo es crucial para asegurar la replicabilidad.
Puedes fácilmente utilizar scikit-learn
para programar estos métodos posterior al EDA:
1from sklearn.linear_model import Lasso 2 3# Carga de los datos de train y test 4# Estos datos deben haber sido normalizados y correctamente tratados en un EDA completo 5 6lasso_model = Lasso(alpha = 0.1, max_iter = 300) 7 8lasso_model.fit(X_train, y_train) 9 10y_pred = lasso_model.predict(y_test)
1from sklearn.linear_model import Ridge 2 3# Carga de los datos de train y test 4# Estos datos deben haber sido normalizados y correctamente tratados en un EDA completo 5 6ridge_model = Ridge(alpha = 0.1, max_iter = 300) 7 8ridge_model.fit(X_train, y_train) 9 10y_pred = ridge_model.predict(y_test)