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 au ML Avec Scikit-Learn

bookÉvaluation du Modèle

Lors de la construction 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 à être performant sur de nouvelles données, non vues auparavant, au-delà de celles utilisées pour l’entraînement. Elle mesure dans quelle mesure les prédictions du modèle peuvent être appliquées à des situations réelles en dehors du jeu de données d’entraînement.

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

Entraîner le modèle à l'aide de l'ensemble d'entraînement puis l'évaluer sur le jeu 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.

En général, la taille du jeu 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 % au jeu 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 le jeu 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))
copy

Le modèle est maintenant entraîné avec l’ensemble d’entraînement à l’aide de .fit(X_train, y_train) et évalué avec l’ensemble de test à l’aide de .score(X_test, y_test).

Comme train_test_split() divise les données aléatoirement, les ensembles d’entraînement et de test diffèrent à chaque exécution, ce qui conduit à des scores variables. Avec un ensemble de données plus volumineux, 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 ensemble de test et le reste comme ensemble d’entraînement. Cette affirmation est-elle correcte ?

Select the correct answer

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

Awesome!

Completion rate improved to 3.13

bookÉvaluation du Modèle

Glissez pour afficher le menu

Lors de la construction 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 à être performant sur de nouvelles données, non vues auparavant, au-delà de celles utilisées pour l’entraînement. Elle mesure dans quelle mesure les prédictions du modèle peuvent être appliquées à des situations réelles en dehors du jeu de données d’entraînement.

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

Entraîner le modèle à l'aide de l'ensemble d'entraînement puis l'évaluer sur le jeu 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.

En général, la taille du jeu 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 % au jeu 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 le jeu 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))
copy

Le modèle est maintenant entraîné avec l’ensemble d’entraînement à l’aide de .fit(X_train, y_train) et évalué avec l’ensemble de test à l’aide de .score(X_test, y_test).

Comme train_test_split() divise les données aléatoirement, les ensembles d’entraînement et de test diffèrent à chaque exécution, ce qui conduit à des scores variables. Avec un ensemble de données plus volumineux, 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 ensemble de test et le reste comme ensemble d’entraînement. Cette affirmation est-elle correcte ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 3
some-alt