[scikit-learn] 機械学習用データセットの作成

Posted on 2019/05/01 in 機械学習 , Updated on: 2019/05/01

はじめに

sklearn.datasets から様々なデータセットを呼び出したり、 人工的にデータを作成することができる。

make_blobs

クラスタリング用の等方性ガウス分布の塊(blob)を作成することができる。
make_blobs()の引数は下記表の通り。


引数 意味
n_samples 整数または配列で指定。整数の場合は、均等に分割されたポイントの総数。配列の場合は、クラスターあたりのサンプル数を指定。default=100
n_features 整数で指定。特徴量の数を指定。default=2
centers 整数または配列で指定。クラスタのセンター数を指定。default=None
cluster_std 浮動小数で指定。全クラスタの標準偏差(ばらつき)を指定。default=1.0
center_box 浮動小数で最小値と最大値を指定。クラスターセンターの範囲を指定。default=(-10,10)
shuffle 真偽値で指定。シャッフルするかどうか。default=True
random_state 整数で指定。ランダムシード値を設定。ここで同じ値を入れると毎回同じランダムセットが生成される。default=None

make_blobs()では、引数で指定した内容に沿って、配列を返す。下記例では、特徴量を2と指定したため、 配列 X には、サンプル数1000、特徴量2の2次元配列が渡される。y には、centersで5と指定しているので、 [0,1,2,3,4]から各クラスタに対応するラベルが渡される。

# インポート(グラフ描画用ライブラリも)
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()

# blobsを作成
X, y = make_blobs(n_samples=1000,
                  n_features=2,
                  centers=5,
                  cluster_std=4.0,
                  center_box=(0,100),
                  shuffle=True,
                  random_state=101)

# 生成された配列 X と y を確認
print(X.shape, y.shape)
# => (1000, 2) (1000,)


# グラフ描画
# x軸を特徴量1, y軸を特徴量2として、ラベルYを使って各クラスタを色分け 
plt.figure(figsize=(8, 8))
plt.scatter(X[:,0], X[:,1], c=y, cmap='rainbow',
            marker='o', s=45, edgecolor='gray')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()