Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Évaluation du modèle | Modélisation
Introduction à l'Apprentissage Automatique avec Python

Évaluation du modèle

Glissez pour afficher le menu

Lors de la création d’un modèle prédictif, il est essentiel de déterminer son niveau de performance avant de l’utiliser pour des prédictions réelles.

L’évaluation du modèle mesure la précision des prédictions du modèle. La méthode .score() fournit cette évaluation.

Évaluer la performance sur l’ensemble d’entraînement est trompeur, car le modèle a tendance à mieux fonctionner sur des données déjà vues. Pour obtenir une mesure réaliste, l’évaluation doit être réalisée sur des données non vues.

En termes formels, l’objectif est de créer un modèle qui généralise bien.

Note
Définition

La généralisation correspond à la capacité du modèle à fonctionner efficacement sur de nouvelles données, non observées auparavant, au-delà des données sur lesquelles il a été entraîné. Elle mesure la précision avec laquelle les prédictions du modèle peuvent être appliquées à des situations réelles en dehors de l’ensemble d’entraînement.

Cela peut être réalisé en divisant aléatoirement l’ensemble de données en deux parties : un ensemble d’entraînement pour ajuster le modèle et un ensemble de test pour l’évaluation.

TrainTestTable

Entraîner le modèle à l'aide de l'ensemble d'entraînement puis l'évaluer sur l'ensemble de test :

model.fit(X_train, y_train)
print(model.score(X_test, y_test))

Pour créer une séparation aléatoire des données, utiliser la fonction train_test_split() du module sklearn.model_selection.

train_test_split

En général, la taille de l'ensemble de test dépend du jeu de données : 25–40 % pour les petits jeux de données, 10–30 % pour les jeux moyens, et moins de 10 % pour les grands jeux de données.

Dans cet exemple, avec seulement 342 instances (un petit jeu de données), allouer 33 % à l'ensemble de test :

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)

Ici, X_train et y_train représentent l'ensemble d'entraînement, tandis que X_test et y_test représentent l'ensemble de test.

123456789101112131415
import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import train_test_split df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Train-test split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33) # Initialize and train a model knn5 = KNeighborsClassifier().fit(X_train, y_train) # Trained 5 neighbors model knn1 = KNeighborsClassifier(n_neighbors=1).fit(X_train, y_train) # Trained 1 neighbor model # Print the scores of both models print('5 Neighbors score:',knn5.score(X_test, y_test)) print('1 Neighbor score:',knn1.score(X_test, y_test))

Le modèle est maintenant entraîné avec le jeu d'entraînement en utilisant .fit(X_train, y_train) et évalué avec le jeu de test en utilisant .score(X_test, y_test).

Comme train_test_split() divise les données aléatoirement, les jeux d'entraînement et de test diffèrent à chaque exécution, ce qui conduit à des scores variables. Avec un ensemble de données plus important, ces scores deviendraient plus stables.

question mark

Pour obtenir une répartition entraînement-test de 67 %/33 %, on prend le premier tiers des lignes comme jeu de test et le reste comme jeu d'entraînement. Cette affirmation est-elle correcte ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 3

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Section 4. Chapitre 3
some-alt