scikit-learnで合成データセットを作成する

Pythonで学ぶデータプライバシーと匿名化

Rebeca Gonzalez

Data engineer

Scikit-learnでデータセットを生成する

  • 確率分布からサンプリングしたデータセットを作成できます

  • 例: 正規分布

正規分布に従うヒストグラムの例

Pythonで学ぶデータプライバシーと匿名化

正規分布

自然界でよく見られる

  • 身長
  • 血圧
  • IQ スコア

正規分布に従う大規模データの身長ヒストグラム

Pythonで学ぶデータプライバシーと匿名化

正規分布からのサンプル

import numpy as np


# 新しい pandas DataFrame を作成 new_measures = pd.DataFrame()
# サンプルの平均(中心)と標準偏差を設定 mean = 65 standard_deviation = 2
# サンプルを生成 new_measures['Height'] = np.random.normal(mean, standard_deviation, 10000)
Pythonで学ぶデータプライバシーと匿名化

正規分布からのサンプル

# 得られた身長分布をヒストグラムで表示
new_measures['Height'].hist(bins=50)

結果データのヒストグラム

Pythonで学ぶデータプライバシーと匿名化

scikit-learnでデータセットを作成する

Scikit-learn には、以下のデータセット生成用の簡単な関数があります:

  • 分類
  • クラスタリング
  • 回帰
Pythonで学ぶデータプライバシーと匿名化

分類・クラスタリング向けの合成データ

make_classification()

  • 正規分布の点群(クラスター)を割り当てます
  • 相関のある特徴量や情報量のない特徴量を作成可能

make_blobs()

  • クラスタの中心と標準偏差を細かく制御可能
Pythonで学ぶデータプライバシーと匿名化

分類用の合成データ

# sklearn.datasets から make_classification をインポート
from sklearn.datasets import make_classification


# サンプルとラベルを生成 x, y = make_classification(n_samples=1000,
n_classes=2,
n_informative=2,
n_features=4,
n_clusters_per_class=2,
class_sep=1)
Pythonで学ぶデータプライバシーと匿名化

分類用の合成データ

# 生成したデータとラベルを確認
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]]
Pythonで学ぶデータプライバシーと匿名化

分類用の合成データ

2クラスの生成データセットにおけるデータ点のプロット

Pythonで学ぶデータプライバシーと匿名化

分類用の合成データ

class_sep の値による生成データの違いを示す3つのプロット。左は点が密、右は大きく分離

Pythonで学ぶデータプライバシーと匿名化

クラスタリング用の合成データ

# クラスタリング用データ生成のため datasets モジュールをインポート
from sklearn.datasets import make_blobs


# 標準偏差を指定 standard_deviation = 1.5
# データとラベルを生成 x, labels = make_blobs(n_features=3, centers=4, cluster_std=standard_deviation)
# 生成データの形状を確認 print(x.shape)
(100, 3)
Pythonで学ぶデータプライバシーと匿名化

クラスタリング用の合成データ

生成されたクラスタリングの散布図。各クラスタは異なる色。4つの中心=4クラスタ

Pythonで学ぶデータプライバシーと匿名化

クラスタリング用の合成データ

標準偏差が生成データに与える影響を示す3つのプロット。左は中心付近に密集、右は大きく分散

Pythonで学ぶデータプライバシーと匿名化

Passons à la pratique !

Pythonで学ぶデータプライバシーと匿名化

Preparing Video For Download...