Vous êtes sur la page 1sur 8

09/11/2023

Echantillonnage Stratifié
5IIR

1. Introduction
Dans ce chapitre, nous passerons en revue l'échantillonnage stratifié, une technique utilisée en
Machine Learning pour générer un ensemble de tests. Nous illustrerons ensuite comment
l’implémenter et fournirons un exemple d’application.

2
1
09/11/2023

2. Techniques d'échantillonnage
La création d'un ensemble de tests est une étape cruciale lors de l'évaluation d'un modèle d'apprentissage
automatique. Le moyen le plus simple de créer un ensemble de tests consiste à sélectionner des instances de
manière aléatoire dans un grand ensemble de données, généralement 20 % de l'ensemble de données
d'origine. En statistiques, cette méthode est appelée échantillonnage aléatoire simple, puisqu'un sous
ensemble d'instances (l'échantillon) est choisi aléatoirement parmi un ensemble plus large (la population).
Chaque sous-ensemble d’instances a la même probabilité d’être sélectionné comme échantillon que tout autre
sous-ensemble d’éléments. L'échantillonnage aléatoire convient généralement si l'ensemble de données
d'origine est suffisamment grand ; sinon, un biais est introduit en raison de l’erreur d’échantillonnage.
L'échantillonnage stratifié est une méthode d'échantillonnage qui réduit l'erreur d'échantillonnage dans les
cas où la population peut être divisée en sous-groupes . Nous effectuons un échantillonnage stratifié en
divisant la population en sous-groupes homogènes, appelés strates , puis en appliquant un échantillonnage
aléatoire simple au sein de chaque sous-groupe. En conséquence, l'ensemble de test est représentatif de la
population, puisque le pourcentage de chaque strate est préservé . Les strates doivent être disjointes ; par
conséquent, chaque élément de la population doit appartenir à une et une seule strate. Considérons
maintenant un exemple réel. La population italienne est composée de 48,7 hommes et 51,3 femmes, donc une
enquête en Italie devrait être réalisée en sélectionnant un échantillon d'individus tout en maintenant ce ratio.
Si l'échantillon de l'enquête contient 1 000 individus, alors l'échantillonnage stratifié sélectionne exactement
487 hommes et 513 femmes. Si un échantillonnage aléatoire simple est effectué, le bon pourcentage
d'hommes et de femmes n'est pas préservé et les résultats de l'enquête seront considérablement biaisés .

3. Étapes impliquées dans l'échantillonnage stratifié


Nous pouvons facilement mettre en œuvre l’échantillonnage stratifié en suivant ces étapes :
• Définir la taille de l'échantillon : nous définissons le nombre d'instances de l'échantillon.
Généralement, la taille d'un ensemble de tests est de 20 % de l'ensemble de données d'origine,
mais elle peut être inférieure si l'ensemble de données est très volumineux.
• Partitionnement de l'ensemble de données en strates : dans cette étape, la population est divisée
en sous-groupes homogènes basés sur des caractéristiques similaires. Chaque instance de la
population doit appartenir à une et une seule strate.
• Appliquer un échantillonnage aléatoire simple pour chaque strate : des échantillons aléatoires
sont prélevés dans chaque strate avec la même proportion définie lors de la première étape.
Représentation schématique la procédure :

4
2
09/11/2023

56
4. Avantages et limites
L'échantillonnage stratifié garantit que chaque groupe au sein de la population reçoit la
représentation appropriée au sein de l'échantillon. Lorsque la population peut être divisée en
sous-groupes homogènes, cette technique donne une estimation plus précise des
paramètres du modèle que l'échantillonnage aléatoire .
Cependant, l'échantillonnage aléatoire simple est plus avantageux lorsque la population ne
peut pas être divisée en sous-groupes, car il existe trop de différences au sein de la population.

5. Exemple (1)
:

Considérons maintenant un exemple de classificateur binaire qui prédit si un chiffre est neuf ou
non. Nous effectuerons la validation croisée K-Fold avec l'échantillonnage stratifié afin d'évaluer les
performances du classificateur. Ensuite, nous exploiterons la classe StratifiedKFold fournie dans le
package Python Scikit-Learn .
Nous ferons notre analyse avec l'ensemble d'entraînement du jeu de données MNIST que nous
normaliserons dans l’intervalle 0, 1

import numpy as np
from keras.datasets import mnist

(x, y), (_, _) = mnist.load_data()


x = x.reshape(-1, 28*28) / 255.0

Nous allons ensuite créer un vecteur cible pour cette tâche de classification binaire : y = (y == 9)

3
09/11/2023
5. Exemple (2)
A noter que cet ensemble de données est déséquilibré puisque les instances négatives (non « 9 »)
sont plus fréquentes que les positives (9).
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import StratifiedKFold
skfolds = StratifiedKFold(n_splits=3)
splits = skfolds.split(x, y) accuracy = np.mean(y_pred == y_test)
for i, (train_index, test_index) in enumerate(splits): print("[SPLIT %d]"%(i+1))
x_train = x[train_index] Maintenant, entraînons et testons
y_train = y[train_index] un classificateur de descente du
x_test = x[test_index] gradient stochastique (SGD) avec
y_test = y[test_index] la validation croisée stratifiée K
clf = SGDClassifier() Fold à l'aide de Scikit-Learn :
clf.fit(x_train, y_train)
y_pred = clf.predict(x_test)

print("Percentage of digit 9 in the original dataset: %.2f %%"%(np.mean(y==True)*100))


print("Percentage of digit 9 in the training set: %.2f %%"%(np.mean(y_train==True)*100))
print("Percentage of digit 9 in the test set: %.2f %%"%(np.mean(y_test==True)*100))
print("Accuracy: %.4f"%accuracy)

5. Exemple (3)
À chaque itération, le code divise l'ensemble de données à l'aide de l'échantillonnage stratifié,
entraîne le classificateur sur les « flods » d'entraînement, effectue des inférences sur le « flod » de
test et évalue la précision globale . Enfin, il affiche le pourcentage d'instances appartenant à la classe
positive dans l'ensemble de données d'origine, l'ensemble d'entraînement et l'ensemble de test à
chaque itération.
Le pourcentage de la classe positive est conservé pour chaque fractionnement comme prévu

8
4
09/11/2023

5. Exemple (4)
Considérons maintenant la validation croisée K-Fold sans échantillonnage stratifié . Il faut
remplacer StratifiedKFold par la classe KFold dans le code ci-dessus :
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import KFold
skfolds = KFold(n_splits=3)
splits = skfolds.split(x, y)
for i, (train_index, test_index) in enumerate(splits):
x_train = x[train_index]
y_train = y[train_index]
x_test = x[test_index]
y_test = y[test_index]
clf = SGDClassifier()
clf.fit(x_train, y_train)
y_pred = clf.predict(x_test)
accuracy = np.mean(y_pred == y_test)
print("[SPLIT %d]"%(i+1))
print("Percentage of digit 9 in the original dataset: %.2f %%"%(np.mean(y==True)*100))
print("Percentage of digit 9 in the training set: %.2f %%"%(np.mean(y_train==True)*100))
print("Percentage of digit 9 in the test set: %.2f %%"%(np.mean(y_test==True)*100))
print("Accuracy: %.4f"%accuracy)

5. Exemple (5)
Nous obtiendrons maintenant le résultat suivant :

Nous pouvons voir que la proportion du pourcentage de la classe positive varie énormément entre
l'ensemble de données d'origine, l'ensemble d'entraînement et l'ensemble de test au sein de chaque
division, car nous n'avons pas utilisé l'échantillonnage stratifié.
10

5
09/11/2023

6. Conclusion
Dans cette présentation, nous avons examiné l'échantillonnage stratifié, une technique
d'échantillonnage utilisée en Machine Learning pour générer des ensembles de tests. Nous avons
également discuté des avantages et des limites de la technique. Enfin, nous avons appris comment
appliquer la validation croisée K-Fold avec échantillonnage stratifié pour évaluer un classificateur de
chiffres à l'aide d'une implémentation Python.

11
6

Vous aimerez peut-être aussi