Menu
CoddyTech

Ensembles de validation

Fait partie de la section Apprentissage supervisé du Journey Machine Learning de Coddy. Leçon 35 sur 58.

Dans le choix de k et de la profondeur de l’arbre, tu as conservé la valeur de k ou la profondeur ayant obtenu le meilleur score de test. Ce score est flatteur : tu l’as conservée parce qu’elle était élevée.

Gardez donc un troisième ensemble pour choisir, l’ensemble de validation :

Une barre divisée en trois parties : lignes d’entraînement 60 %, utilisées pour ajuster chaque candidat ; validation 20 %, utilisée pour choisir ; test 20 %, utilisé pour présenter les résultats une seule fois

Deux découpages suffisent. 0.25 des 80 % restants, cela fait 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))

Pour 500 lignes, cela affiche :

300 100 100

Fais ton choix à partir de l’ensemble de validation. Ne touche à l’ensemble de test qu’une seule fois, tout à la fin.

challenge icon

Défi

Moyen

Un vignoble prédit le rendement en raisin par rangée avec Ridge. Le code de départ choisit alpha en fonction du score de test et indique ce même score. Corrigez-le.

  1. Divisez X_rest et y_rest en rangées d’entraînement et de validation (test_size=0.25, random_state=0).
  2. Choisissez alpha en fonction du R carré de validation et affichez-le avec ce score.
  3. Ajustez le modèle avec l’alpha choisi sur les rangées d’entraînement et affichez son R carré de test.

Pour un autre vignoble :

Chosen alpha: 1 (validation R squared 0.787)
Test R squared: 0.726

Le score obtenu honnêtement est souvent inférieur à celui du code de départ. C’est le vrai score.

Essayez vous-même

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge


# Ajuste un modèle Ridge(alpha) avec mise à l’échelle sur le premier ensemble de lignes et renvoie son R carré sur le second
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 lignes de données viticoles : 10 mesures chacune et le rendement en raisins 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)

# Ceci choisit alpha en fonction du score de test, puis affiche ce même score : corriger cela
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}")
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Apprentissage supervisé

Entraînez-vous par vous-même : Compilateur Python en ligne