Conjuntos de validación
Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 35 de 58.
En Cómo elegir k y la profundidad del árbol, conservaste el valor de k o la profundidad con la mejor puntuación de prueba. Esa puntuación favorece: la conservaste porque resultó alta.
Así que reserva un tercer conjunto para elegir, el conjunto de validación:
Dos divisiones lo consiguen. 0.25 del 80% restante es 20%:
X_rest, X_test, y_rest, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
X_train, X_val, y_train, y_val = train_test_split(X_rest, y_rest, test_size=0.25, random_state=0)
print(len(X_train), len(X_val), len(X_test))Para 500 filas, imprime:
300 100 100Elige según el conjunto de validación. Usa el conjunto de prueba una sola vez, al final.
Desafío
IntermedioUn viñedo predice el rendimiento de uva por hilera con Ridge. El código inicial elige alpha según la puntuación de prueba e informa esa misma puntuación. Corrígelo.
- Divide
X_restyy_resten filas de entrenamiento y de validación (test_size=0.25,random_state=0). - Elige alpha según el R cuadrado de validación e imprímelo junto con esa puntuación.
- Entrena con el alpha elegido usando las filas de entrenamiento e imprime su R cuadrado de prueba.
Para otro viñedo:
Chosen alpha: 1 (validation R squared 0.787)
Test R squared: 0.726La puntuación honesta suele ser inferior a la del código inicial. Es la verdadera.
Pruébalo tú mismo
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge
# Ajusta un Ridge(alpha) con datos escalados en el primer conjunto de filas y devuelve su R cuadrado en el segundo
def ridge_r2(alpha, X_fit, y_fit, X_check, y_check):
scaler = StandardScaler()
model = Ridge(alpha=alpha)
model.fit(scaler.fit_transform(X_fit), y_fit)
return model.score(scaler.transform(X_check), y_check)
# 90 filas de viñedos: 10 mediciones por fila y el rendimiento de uva en kg
rows = pd.read_csv("vineyard.csv")
features = ["sun_hours", "rain_mm", "soil_ph", "slope_deg", "vine_age",
"row_length_m", "buds_per_vine", "frost_days", "wind_kmh", "clay_pct"]
X = rows[features]
y = rows["yield_kg"]
alphas = [0.1, 1, 10, 100]
X_rest, X_test, y_rest, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# Esto elige alpha según la puntuación de prueba y luego informa de esa misma puntuación: corrígelo
best_alpha = 0
best_r2 = -1
for alpha in alphas:
r2 = ridge_r2(alpha, X_rest, y_rest, X_test, y_test)
if r2 > best_r2:
best_alpha = alpha
best_r2 = r2
print(f"Chosen alpha: {best_alpha}")
print(f"Test R squared: {best_r2:.3f}")
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Aprendizaje supervisado
1Tu primer modelo
Aprender de ejemplosConjuntos de entrenamiento y pruebaAjustar y predecirEvaluar un modeloRepaso: clasificador de semillas4Regresión logística
Predicciones de sí o noEl umbral de decisiónLos pesos como evidenciaVarias clasesRepaso: filtro de spam7Sobreajuste
Subajuste y sobreajusteCurvas de aprendizajeRegularizaciónConjuntos de validaciónRepaso: Ajustar un árbol2Vecinos más cercanos
Cómo decide k-NNCómo elegir kFronteras de decisiónEscalado para los vecinosRepaso: vecinos del vino5Medición de clasificadores
La matriz de confusiónPrecisión y exhaustividadLa puntuación F1Clases desequilibradasCurvas ROCRepaso: prueba de detección8Validación cruzada
Validación K-FoldComparación justa de modelosBúsqueda en cuadrículaRepaso: reparaciones de monopatines11Proyecto: especies de pingüinos
Conoce a los pingüinosPrepara los datosElige un modeloAjusta el modelo ganadorPublica el modelo3Regresión lineal
Predicción de númerosVarias característicasMedición de erroresGráficos de residuosRepaso: alquiler de bicicletas6Árboles de decisión
Los árboles hacen preguntasLeer un árbolProfundidad del árbolImportancia de las característicasRepaso: decisiones de préstamosPractica por tu cuenta: Compilador de Python online