Menu
CoddyTech

Regularización

Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 34 de 58.

Un modelo lineal sobreajustado se apoya en pesos grandes para ajustarse a cada fila ruidosa. La regresión Ridge impone una penalización por los pesos grandes, y alpha fija el precio.

Aquí hay 20 guitarras usadas y seis características escaladas que predicen el precio:

Seis líneas, un peso por cada característica de la guitarra, frente a alfa de 0.01 a 1000. El estado comienza en 116, la marca en 104 y la antigüedad en menos 83; todas se acercan a 0 a medida que aumenta alfa

Es un intercambio desde LinearRegression, cuyos pesos eran [-83. 116. 104. 27. 17. 15.]:

from sklearn.linear_model import Ridge

ridge = Ridge(alpha=100)
ridge.fit(X_train, y_train)
print(np.round(ridge.coef_))

Esto imprime:

[-14.  18.  16.  10.   5.   8.]

Un alfa más grande, pesos más pequeños, menos sobreajuste. Si es demasiado grande, el modelo presenta subajuste.

challenge icon

Desafío

Intermedio

Un sitio vacacional predice los precios por noche de las cabañas a partir de 8 características, usando solo 16 cabañas. El programa lee alpha; el código inicial divide y escala los datos.

  1. Ajusta un LinearRegression y un Ridge con ese alpha.
  2. Imprime el tamaño total de los pesos de cada modelo: suma sus pesos sin signo y redondea el resultado.
  3. Imprime el R cuadrado de prueba de cada uno (3 decimales) y el mejor modelo, como se muestra abajo.

Para otra región y 5:

Total weight size: plain 90, ridge 53
Test R squared: plain -0.471, ridge 0.642
Better on new cottages: ridge

Pruébalo tú mismo

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.metrics import r2_score

alpha = float(input())

# No cambies las líneas siguientes: 28 casas de vacaciones, 8 características y el precio por noche en euros
cottages = pd.read_csv("cottages.csv")
features = ["size_m2", "bedrooms", "lake_m", "age_years", "town_km", "sauna", "road_noise_db", "forest_m"]
X = cottages[features]
y = cottages["price"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje supervisado

Practica por tu cuenta: Compilador de Python online