Synthetische datasets maken met scikit-learn

Dataprivacy en anonimisering in Python

Rebeca Gonzalez

Data engineer

Datasets genereren met Scikit-learn

  • We kunnen datasets maken die samplen uit kansverdelingen

  • Zoals de normale verdeling

Weergave van een normaal verdeelde histogram

Dataprivacy en anonimisering in Python

Normale verdeling

Komen vaak voor in de natuur

  • Lengtes
  • Bloeddruk
  • IQ-scores

Histogram van lengtes in een grote dataset die een normale verdeling volgt

Dataprivacy en anonimisering in Python

Steekproef uit een normale verdeling

import numpy as np


# Create new pandas DataFrame new_measures = pd.DataFrame()
# Selecting the mean/center values and the standard deviation of the sample mean = 65 standard_deviation = 2
# Generating the sample new_measures['Height'] = np.random.normal(mean, standard_deviation, 10000)
Dataprivacy en anonimisering in Python

Steekproef uit een normale verdeling

# Draw histogram to see the resulting heights distribution
new_measures['Height'].hist(bins=50)

Histogram van de resulterende data

Dataprivacy en anonimisering in Python

Datasets maken met scikit-learn

Scikit-learn biedt eenvoudige functies om datasets te genereren voor:

  • Classificatie
  • Clustering
  • Regressie
Dataprivacy en anonimisering in Python

Synthetische data voor classificatie en clustering

make_classification()

  • Maakt normaal verdeelde clusters van punten
  • Kan gecorreleerde en niet-informatieve features maken

make_blobs()

  • Meer controle over de centers en standaarddeviaties van clusters
Dataprivacy en anonimisering in Python

Synthetische data voor classificatie

# Import make_classification from sklearn datasets module
from sklearn.datasets import make_classification


# Generate the samples and their labels x, y = make_classification(n_samples=1000,
n_classes=2,
n_informative=2,
n_features=4,
n_clusters_per_class=2,
class_sep=1)
Dataprivacy en anonimisering in Python

Synthetische data voor classificatie

# See the generated data and labels
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]]
Dataprivacy en anonimisering in Python

Synthetische data voor classificatie

Plot van datapunten in de gegenereerde 2-klassen dataset

Dataprivacy en anonimisering in Python

Synthetische data voor classificatie

Drie plots van de gegenereerde dataset met verschillende class_sep-waarden. Links liggen de punten dicht bij elkaar; rechts zijn ze sterk gescheiden

Dataprivacy en anonimisering in Python

Synthetische data voor clustering

# Import the datasets module for generating clustering datasets
from sklearn.datasets import make_blobs


# Specify a value for standard deviation standard_deviation = 1.5
# Generate the data and labels of the dataset x, labels = make_blobs(n_features=3, centers=4, cluster_std=standard_deviation)
# See the shape of the generated data print(x.shape)
(100, 3)
Dataprivacy en anonimisering in Python

Synthetische data voor clustering

Plot met de resulterende clustering-datapunten, één kleur per cluster. 4 centers voor 4 clusters.

Dataprivacy en anonimisering in Python

Synthetische data voor clustering

Drie plots die tonen hoe de standaarddeviatie de gegenereerde datapunten beïnvloedt. Links clusters dicht bij hun center, rechts sterk verspreid.

Dataprivacy en anonimisering in Python

Laten we oefenen!

Dataprivacy en anonimisering in Python

Preparing Video For Download...