Menu
CoddyTech

Chaînes de traitement

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

Les tableaux réels contiennent des valeurs manquantes, des mots et des échelles différentes. Ce chapitre construit un objet qui les nettoie et effectue des prédictions, un pipeline :

Un schéma intitulé Colonnes brutes en entrée, prédictions en sortie. Les nombres avec des valeurs manquantes suivent une voie, SimpleImputer comble les valeurs manquantes, puis StandardScaler intervient. Les mots suivent une autre voie, OneHotEncoder les transforme en 0 et en 1. Les deux voies se rejoignent au niveau du modèle. Un cadre en pointillés autour des étapes indique un pipeline unique : entraînez-le, puis effectuez des prédictions

Commence petit : make_pipeline enchaîne un scaler et un modèle :

from sklearn.pipeline import make_pipeline

pipe = make_pipeline(StandardScaler(), KNeighborsClassifier())
pipe.fit(X_train, y_train)
print(pipe.score(X_test, y_test))

Pour 200 soudures de test, fortes ou faibles, cela affiche 0.86, contre 0.74 sans mise à l’échelle.

fit apprend la mise à l’échelle à partir des lignes d’entraînement, puis entraîne le modèle. Toutes les lignes suivantes sont mises à l’échelle de la même manière, automatiquement.

challenge icon

Défi

Moyen

Une entreprise de montgolfières décide chaque soir si le lendemain sera un jour de vol. Le code de départ effectue la mise à l’échelle manuellement : la précision sur les données de test est bonne, mais les prévisions ne sont jamais mises à l’échelle, alors le modèle répond yes quelle que soit la météo.

  1. Remplace-le par un pipeline, avec un scaler suivi de k-NN, entraîné sur les lignes d’entraînement.
  2. Affiche sa précision sur les données de test et évalue la prévision avec lui.

Pour une autre entreprise, jour 20, 32, 7000, 9 :

Test accuracy: 0.880
Flying day: no

Essayez vous-même

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline

# Jours passés dans une compagnie de montgolfières : jour de vol (1) ou non (0)
days = pd.read_csv("balloons.csv")
X = days[["wind_kmh", "gusts_kmh", "visibility_m", "passengers"]].to_numpy()
y = days["flying_day"].to_numpy()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

# Prévisions pour demain : vent, rafales, visibilité, passagers ayant réservé
day = np.array([[float(input()), float(input()), float(input()), float(input())]])

# Mise à l’échelle manuelle : le score semble bon, mais les prévisions ne sont jamais mises à l’échelle
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
model = KNeighborsClassifier()
model.fit(X_train_scaled, y_train)
print(f"Test accuracy: {model.score(X_test_scaled, y_test):.3f}")
if model.predict(day)[0] == 1:
    print("Flying day: yes")
else:
    print("Flying day: no")
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