DBSCANとは
DBSCANはクラスタに属さないデータポイントも判別できるアルゴリズム。
各データポイントは距離esp内にmin_samplesの他データポイントがあるか確認し、存在する場合は範囲内のデータポイントをクラスタ化する。
距離esp内のデータポイントがmin_samples数に満たない場合はノイズとなる。
espとmin_samplesの可視化
DBSCANの使用
from sklearn.datasets import make_moons from sklearn.preprocessing import StandardScaler X, y = make_moons(n_samples=200, noise=0.05, random_state=0) scaler = StandardScaler() scaler.fit(X) X_scaled = scaler.transform(X) dbscan = DBSCAN() cluster = dbscan.fit_predict(X_scaled) plt.scatter(X_scaled[:, 0], X_scaled[:,1], c=cluster, cmap=mglearn.cm2, s=60) plt.xlabel("Feature 0") plt.ylabel("Feature 1")
make_moonsのような形状のデータポイントでも近い集団を判別するので正しく判別できる。
DBSCANが機能しないケース
データポイントの性質がespとmin_samplesの値にfitしない場合(データポイント数が少ない、min_samples数が多い)、うまく機能しない。
from sklearn.cluster import DBSCAN from sklearn.datasets import make_blobs X, y = make_blobs(random_state=0, n_samples=12) dbscan = DBSCAN() cluster = dbscan.fit_predict(X) print("Cluster memberships:\n{}".format(cluster))
データポイント数が少ないケース。各データポイントはmin_samples数を満たせず、すべてがノイズとして判断されてしまう。
Cluster memberships: [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
リンク