Créer des ensembles de données synthétiques avec scikit-learn

Confidentialité des données et anonymisation en Python

Rebeca Gonzalez

Data engineer

Générer des ensembles de données avec Scikit-learn

  • Nous pouvons créer des ensembles de données à partir de lois de probabilité

  • Par exemple, la loi normale

Représentation d'un histogramme suivant une loi normale

Confidentialité des données et anonymisation en Python

Loi normale

Souvent observée dans la nature

  • Tailles
  • Pression artérielle
  • Quotients intellectuels (QI)

Histogramme des tailles dans un grand ensemble de données suivant une loi normale

Confidentialité des données et anonymisation en Python

Échantillon selon une loi normale

import numpy as np


# Créer un nouveau DataFrame pandas new_measures = pd.DataFrame()
# Choisir la moyenne (centre) et l'écart type de l'échantillon mean = 65 standard_deviation = 2
# Générer l'échantillon new_measures['Height'] = np.random.normal(mean, standard_deviation, 10000)
Confidentialité des données et anonymisation en Python

Échantillon selon une loi normale

# Tracer un histogramme pour voir la distribution des tailles
new_measures['Height'].hist(bins=50)

Histogramme des données obtenues

Confidentialité des données et anonymisation en Python

Créer des ensembles de données avec scikit-learn

Scikit-learn offre des fonctions simples pour générer des ensembles de données pour :

  • Classification
  • Regroupement (clustering)
  • Régression
Confidentialité des données et anonymisation en Python

Données synthétiques pour classification et regroupement

make_classification()

  • Alloue des amas de points suivant une loi normale
  • Peut créer des caractéristiques corrélées et non informatives

make_blobs()

  • Plus de contrôle sur les centres et les écarts types des amas
Confidentialité des données et anonymisation en Python

Données synthétiques pour la classification

# Importer make_classification du module datasets de sklearn
from sklearn.datasets import make_classification


# Générer les échantillons et leurs étiquettes x, y = make_classification(n_samples=1000,
n_classes=2,
n_informative=2,
n_features=4,
n_clusters_per_class=2,
class_sep=1)
Confidentialité des données et anonymisation en Python

Données synthétiques pour la classification

# Voir les données et étiquettes générées
print(x.shape)
print(y.shape)
print(x)
(1000, 4)
(1000,)
[[ 1.22914870e+00 -2.62386795e+00  2.25878743e+00  2.55377055e+00]
 [-1.10279812e+00 -1.15816087e+00  1.55571279e+00  7.80565898e-02]
 [ 2.65581977e-03 -2.33278818e+00  2.37837858e+00  1.57533194e+00]
 ...
 [ 4.51006972e-01  7.53435745e-01 -9.21597108e-01 -2.20659747e-01]
 [ 5.31925876e-01  7.42210504e-01 -9.37625248e-01 -1.61488855e-01]
 [ 1.62862108e+00 -2.72435345e+00  2.22562940e+00  2.87628246e+00]]
Confidentialité des données et anonymisation en Python

Données synthétiques pour la classification

Nuage de points du jeu de données à 2 classes généré

Confidentialité des données et anonymisation en Python

Données synthétiques pour la classification

Trois graphiques montrant le jeu de données généré et ses points pour différents class_sep : à gauche, points très rapprochés ; à droite, points très séparés

Confidentialité des données et anonymisation en Python

Données synthétiques pour le regroupement

# Importer le module datasets pour générer des données de regroupement
from sklearn.datasets import make_blobs


# Définir une valeur d'écart type standard_deviation = 1.5
# Générer les données et étiquettes du jeu de données x, labels = make_blobs(n_features=3, centers=4, cluster_std=standard_deviation)
# Voir la forme des données générées print(x.shape)
(100, 3)
Confidentialité des données et anonymisation en Python

Données synthétiques pour le regroupement

Nuage de points résultant du regroupement, une couleur par amas. 4 centres pour 4 amas.

Confidentialité des données et anonymisation en Python

Données synthétiques pour le regroupement

Trois graphiques montrant l'effet de l'écart type sur les points générés : à gauche, amas serrés près du centre ; à droite, points très dispersés.

Confidentialité des données et anonymisation en Python

Passons à la pratique !

Confidentialité des données et anonymisation en Python

Preparing Video For Download...