概要
sklearn.datasets.make_blobls()
は、クラス分類のためのデータを生成する。blobとはインクの染みなどを指し、散布図の点の様子からつけられてるようだ。
標準では、データの総数、特徴量の数、クラスターの数などを指定して実行し、特徴量配列X、ターゲットとなるクラスデータyのタプルが返される(引数の指定によってはもう1つ戻り値が追加される)。
得られるデータの形式
特徴量配列Xは列が特徴量、行がレコードの2次元配列。ターゲットyはレコード数分のクラス属性値の整数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
from sklearn.datasets import make_blobs X, y = make_blobs(n_samples=10, random_state=0) print(X) print(y) # [[ 1.12031365 5.75806083] # [ 1.7373078 4.42546234] # [ 2.36833522 0.04356792] # [ 0.87305123 4.71438583] # [-0.66246781 2.17571724] # [ 0.74285061 1.46351659] # [-4.07989383 3.57150086] # [ 3.54934659 0.6925054 ] # [ 2.49913075 1.23133799] # [ 1.9263585 4.15243012]] # [0 0 1 0 2 2 2 1 1 0] |
利用例
そのままscikit-learnのモデルの入力とする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from sklearn.datasets import make_blobs from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier X, y = make_blobs(n_samples=100, centers=2, random_state=0) X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) clf = KNeighborsClassifier(n_neighbors=1) clf.fit(X_train, y_train) print(clf.score(X_train, y_train)) print(clf.score(X_test, y_test)) # 1.0 # 0.96 |
クラスごとに色やマークを変えて散布図を描く。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_blobs X, y = make_blobs(n_samples=30, centers=3, random_state=10) markers = ['o', '^', 'v'] fig, ax = plt.subplots() for cluster, marker in zip(range(3), markers): x = X[y==cluster] ax.scatter(x[:, 0], x[:, 1], marker=marker) plt.show() |
パラメーターの指定
1 2 |
make_blobs(n_samples, n_features, centers, cluster_std, center_box, shuffle, random_state, return_centers) |
主なもの。
n_samples
- 整数で指定した場合、生成されるサンプルの総数で戻り値Xの行数になる。配列で指定した場合、その要素数がクラスターの数となり、各要素はクラスターのデータ数となる。デフォルトは100。
n_features
- 特徴量の数で、戻り値Xの列数になる。デフォルトは2
centers
- クラスター中心の数。
n_samples
を整数で指定してcenters
を指定しない場合(デフォルトのNoneの場合)、centers=3
となる。n_samples
を配列で指定した場合はNoneか[n_centers, n_features]
の配列。 center_std
- クラスターの標準偏差。