クラスタリング : DBSCAN の実装

クラスタリングアルゴリズムの中で、クラスタが球状という前提を持たずに、
クラスタラベルを割り当てる。

from sklearn.datasets import make_moons
X, y = make_moons(
    n_samples=200,
    noise=0.05,
    random_state=0
)
plt.scatter(X[:, 0 ], X[:, 1])
plt.tight_layout()
plt.show()
from sklearn.cluster import DBSCAN

"""
コア点、ボーダー点、ノイズ点 にラベル付を行う。

eps : 隣接点とみなす 2 点間の最大距離
min_samples : ボーダー点の最大個数
metric : 距離の計算方法
"""
db = DBSCAN(eps=0.2, min_samples=5, metric='euclidean')
y_db = db.fit_predict(X)
plt.scatter(X[y_db == 0, 0], X[y_db == 0, 1],
            c='lightblue', marker='o', s=40,
            edgecolor='black', 
            label='cluster 1')
plt.scatter(X[y_db == 1, 0], X[y_db == 1, 1],
            c='red', marker='s', s=40,
            edgecolor='black', 
            label='cluster 2')
plt.legend()
plt.tight_layout()
#plt.savefig('images/11_16.png', dpi=300)
plt.show()