Académique Documents
Professionnel Documents
Culture Documents
Ricco Rakotomalala
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 1
Echantillonnage dans le contexte big data
• Contexte big data : la taille des bases à traiter devient un enjeu essentiel
Chargement en mémoire de la totalité des données n’est plus possible parfois
Temps de traitements prohibitifs (lorsqu’ils sont possibles)
Développement des technologies big data (informatique distribuée essentiellement)
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 2
Configuration technique
Base initiale
• Fichier texte CSV (comma separated value)
• Très gros volume, ne tient pas en mémoire centrale
• Accès séquentiel
• Individus non pondérés
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 3
Plan
4. Conclusion
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 4
La taille « N » de la base de sondage est connue. Soit fournie a priori, soit parce qu’il a été
possible d’effectuer une passe préalable (pas trop coûteuse en ressources) sur les données.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 5
Utilisation d’un index
sample(1:N,n,replace=F) # par exemple sous R
numpy.random.randint(1,N,n) #par exemple sous Python
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 6
Création d’un index
Comment générer les index si l’on ne dispose pas d’une fonction dédiée ?
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 7
Extraction sans utilisation d’un index – Méthode de sélection rejet
On peut s’affranchir du vecteur d’index avec une gestion fine de la
probabilité d’inclusion et un générateur de nombres aléatoires.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 8
Extraction sans utilisation d’un index (Python)
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 9
Extraction sans utilisation d’un index (R)
#vecteur de valeurs
N <- 1000
source <- 1:N
#n
n <- 10
#échantillon initialisation
echantillon <- c()
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 10
La taille « N » de la base de sondage est inconnue ou trop coûteuse à acquérir
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 11
Réservoir sampling (Algorithm R – Vitter, 1985)
Principe : Contrainte :
1. charger les « n » premiers individus dans une collection • Maintenir la collection en mémoire
2. mettre à jour cette collection au fur et à mesure de la • Ou tout du moins dans une structure
où un accès indicé est possible.
lecture des individus restants
Initialisation : remplissage
• Entrée : n et fichier source du « réservoir » avec les n
• Sortie : C un collection avec n lignes
premières lignes du fichier
• Pour i:= 0 à n-1 ; C[i]:= Lire une ligne
source.
• t := n
• TANT QUE pas fin de fichier
Permet une péréquation de la
• Lire une ligne
• t := t + 1 probabilité d’être dans le réservoir
• k := TRUNC(t * ALEA()) # 0 ≤ k ≤ t-1 au fil des intégrations / retraits.
• SI k < n
• ALORS C[k]:= ligne
• FIN SI Mise à jour du « réservoir »
• FIN TANT QUE à l’indice n°k.
𝑛
Chaque item a une probabilité d’inclusion (Wikipédia, Reservoir Sampling)
𝑐𝑎𝑟𝑑(𝑠𝑜𝑢𝑟𝑐𝑒)
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 12
Réservoir sampling (Python) import math, numpy
#initialisation
t = n
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 13
Réservoir sampling (R)
#vecteur de valeurs
N <- 1000
source <- 1:N
#n
n <- 10
#réservoir initialisation
La similitude avec le code Python n’a rien
collection <- source[1:n]
de fortuit.
#initialisation
t = n + 1
Dans ce code R, la boucle for sur la
source n’est pas très efficace. Mais elle #tant que pas fin de source
est inévitable lorsque l’on devra la for (i in (n+1):N){
t <- t + 1
transposer en une lecture ligne par ligne
k <- floor(t * runif(1))
dans un fichier à accès séquentiel. if (k <= n){
collection[k] <- source[i]
}
}
#affichage
print(collection)
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 14
Déterminer la taille suffisante d’échantillon (n*) pour obtenir un modèle
aussi performant que celui qui aurait été élaboré sur la totalité de la base
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 15
Stratégie d’échantillonnage pour l’apprentissage supervisé
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 16
Solution 1 – Random sampling – Augmentation graduelle
Augmentation de la taille de l’échantillon (n = n + na)
(pourrait être un
échantillon déjà)
Dataset pour la Echantillon, ensemble Construction de la fonction
modélisation d’apprentissage (n) f(.) à partir de l’échantillon
Y = f(X1,X2,…)
Application du modèle
(prédiction) sur l’ensemble de test
Dataset Mesures de
(Y , Yˆ )
performances par
confrontation
Y : valeurs observées entre Y et Y^ (ex.
Dataset pour l’évaluation Y^ : valeurs prédites par f(.) taux d’erreur)
(on pourrait choisir de ne travailler
que sur un échantillon pour le test) Evolution du taux d'erreur
0.40
0.35
0.30
0.25
Taux d'erreur
0.20
0.05
0.00
Ricco Rakotomalala 0 1 2 3 4 5 6 7
𝑒𝑟𝑟(𝑌, 𝑌)
Dataset
100.000 obs. Taux d'erreur vs. Taille Echantillon
80.000 obs.
Dataset pour l’évaluation
0.22
0.20
Taux d'erreur
A partir de n* 3000 individus, la
0.18
décroissance de l’erreur en évaluation est
marginale (taux d’erreur 14%) 0.16
0.14
Taile d'échantillon
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 18
Solution 2 – Windowing Les rajouter à l’ensemble
Ensemble
d’apprentissage
d’apprentissage
Construction de la fonction
f(.) à partir de l’échantillon
Y = f(X1,X2,…)
Dataset pour la
modélisation Identifier les
(Y , Yˆ )
Dataset
(soit la totalité, soit
individus mal classés
un échantillon)
Ensemble de test
Les individus bien classés à l’étape
courante deviennent l’ensemble de test
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 19
Solution 2 – Windowing - Exemple Dégradation à la première itération puisqu’on a introduit toutes les
observations à problème (au détriment des données « utiles »).
0.40
0.35
Taux d'erreur en évaluation
Taille base évaluation = 80000
0.30
0.25
Non requis habituellement pour le
0.20
windowing, mais nous l’utilisons pour
suivre de taux d’erreur en généralisation.
0.15
0 2000 4000 6000 8000 10000 12000
Taile d'échantillon
Convergence plus rapide
(moins d’itérations). Mais taille
d’échantillon plus grande.
habituellement
• Convergence plus rapide (ici arrêt parce que tous les individus sont bien classés sur le reste de la base
Constaté
• Des variantes plus rapides existent pourvu que l’on puisse « sauter » plusieurs enregistrements
vers l’avant lors de la sélection des lignes (soit parce que la source est en accès indexé, soit
parce que le saut est moins coûteux que la lecture ligne par ligne)
• Des variantes existent pour l’appréhension des pondérations des individus (tirage avec des
probabilités inégales)
• Des algorithmes distribués existent pour tirer parti des clusters de machines
• L’expérimentation menée ici n’a pas valeur de preuve (une base, un algo de machine learning)
• Quoiqu’il en soit, travailler sur des échantillon peut être bénéfique
• La taille optimale n* de l’échantillon dépend de la base traitée et de la méthode de machine
learning utilisée : on doit passer par l’expérimentation.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 22
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 23
Références
• Hoeksma S., « Machine Learning and Data: Exploring the Potential of Windowing ».
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 24