Creare dataset sintetici con scikit-learn

Riservatezza dei dati e anonimizzazione in Python

Rebeca Gonzalez

Data engineer

Generare dataset con Scikit-learn

  • Possiamo creare dataset campionati da distribuzioni di probabilità

  • Come la distribuzione normale

Rappresentazione di un istogramma a distribuzione normale

Riservatezza dei dati e anonimizzazione in Python

Distribuzione normale

Ricorrono spesso in natura

  • Altezze
  • Pressione sanguigna
  • Punteggi IQ

Istogramma di valori di altezza di un grande dataset che seguono una distribuzione normale

Riservatezza dei dati e anonimizzazione in Python

Campionare da una distribuzione normale

import numpy as np


# Crea un nuovo DataFrame pandas new_measures = pd.DataFrame()
# Seleziona media/centro e deviazione standard del campione mean = 65 standard_deviation = 2
# Genera il campione new_measures['Height'] = np.random.normal(mean, standard_deviation, 10000)
Riservatezza dei dati e anonimizzazione in Python

Campionare da una distribuzione normale

# Disegna l'istogramma per vedere la distribuzione delle altezze
new_measures['Height'].hist(bins=50)

Istogramma dei dati risultanti

Riservatezza dei dati e anonimizzazione in Python

Creare dataset con scikit-learn

Scikit-learn offre funzioni semplici per generare dataset per:

  • Classificazione
  • Clustering
  • Regressione
Riservatezza dei dati e anonimizzazione in Python

Dati sintetici per classificazione e clustering

make_classification()

  • Alloca cluster di punti a distribuzione normale
  • Può creare feature correlate e non informative

make_blobs()

  • Maggior controllo su centri e deviazioni standard dei cluster
Riservatezza dei dati e anonimizzazione in Python

Dati sintetici per la classificazione

# Importa make_classification dal modulo datasets di sklearn
from sklearn.datasets import make_classification


# Genera i campioni e le loro etichette x, y = make_classification(n_samples=1000,
n_classes=2,
n_informative=2,
n_features=4,
n_clusters_per_class=2,
class_sep=1)
Riservatezza dei dati e anonimizzazione in Python

Dati sintetici per la classificazione

# Visualizza i dati e le etichette generate
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]]
Riservatezza dei dati e anonimizzazione in Python

Dati sintetici per la classificazione

Grafico dei punti del dataset generato a 2 classi

Riservatezza dei dati e anonimizzazione in Python

Dati sintetici per la classificazione

Tre grafici che mostrano il dataset generato e i suoi punti con diversi valori di class_sep. A sinistra i punti sono molto vicini; a destra sono molto separati

Riservatezza dei dati e anonimizzazione in Python

Dati sintetici per il clustering

# Importa il modulo datasets per generare dataset di clustering
from sklearn.datasets import make_blobs


# Specifica un valore per la deviazione standard standard_deviation = 1.5
# Genera i dati e le etichette del dataset x, labels = make_blobs(n_features=3, centers=4, cluster_std=standard_deviation)
# Visualizza la shape dei dati generati print(x.shape)
(100, 3)
Riservatezza dei dati e anonimizzazione in Python

Dati sintetici per il clustering

Grafico dei punti di clustering risultanti, un colore per cluster. 4 centri per 4 cluster.

Riservatezza dei dati e anonimizzazione in Python

Dati sintetici per il clustering

Tre grafici che mostrano come la deviazione standard influisce sui punti generati. A sinistra i cluster sono vicini al centro; a destra i punti sono molto dispersi.

Riservatezza dei dati e anonimizzazione in Python

Passiamo alla pratica !

Riservatezza dei dati e anonimizzazione in Python

Preparing Video For Download...