Select Language

AI Technology Community

DBSCANアルゴリズムプロセス

DBSCANアルゴリズムの核心的な考え方は以下の通りです:ある選択されたコアポイントから始めて、密度到達可能な領域に向かって絶えず拡張し、それによってコアポイントと境界点を含む最大化された領域を得ます。この領域内の任意の2点は密度的につながっています。

データ集合を考えます。DBSCANアルゴリズムの目標は、データ集合XをK個のクラスター(kはアルゴリズムによって自動的に推測され、事前に指定する必要はありません)とノイズ点に分割することです。このため、クラスターのラベル配列を導入します。

これにより、DBSCANアルゴリズムの目標はラベル配列を生成することであり、Kは内の異なる非負数の個数です。

入力:サンプル集合D=(x1,x2,...,xm)

出力: クラスター分割C. 

見てわかるように、DBSCANは新しいコアポイントを絶えず発見すると同時に、直接密度到達可能な関係を通じて、コアポイントの近傍内のコアポイントを発見し、これらの近傍内のコアポイントをすべて第k個のクラスターにまとめます。一方、ノイズ点は各ラウンドのkクラスタリングでグローバルにフィルタリングされ、次のラウンドのヒューリスティックな発見には関与しません。境界点だけが次の反復で新しいクラスターのコアポイントになる可能性があるかどうか再び検査されます。

0x3:こんにちは、世界!DBSCAN


# -*- コーディング:utf-8 -*-
インポート numpy as np
from sklearn.cluster インポート DBSCAN
from sklearn インポート metrics
from sklearn.datasets.samples_generator インポート make_blobs
from sklearn.preprocessing インポート StandardScaler

# #############################################################################
# サンプルデータを生成する
centers = [[1, 1], [-1, -1], [1, -1]]
X, labels_true = make_blobs(n_samples=750, centers=centers, cluster_std=0.4,
                            random_state=0)

X = StandardScaler().fit_transform(X)

# #############################################################################
# DBSCANを計算する
db = DBSCAN(eps=0.3, min_samples=10).fit(X)
print db.labels_
core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
print core_samples_mask
core_samples_mask[db.core_sample_indices_] = True
labels = db.labels_

# ラベル内のクラスターの数(ノイズがある場合は無視する)
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)

print('推定されたクラスターの数: %d' % n_clusters_)
print("均質性: %0.3f" % metrics.homogeneity_score(labels_true, labels))
print("完全性: %0.3f" % metrics.completeness_score(labels_true, labels))
print("V尺度: %0.3f" % metrics.v_measure_score(labels_true, labels))
print("調整されたランド指数: %0.3f"
      % metrics.adjusted_rand_score(labels_true, labels))
print("調整された相互情報量: %0.3f"
      % metrics.adjusted_mutual_info_score(labels_true, labels))
print("シルエット係数: %0.3f"
      % metrics.silhouette_score(X, labels))

# #############################################################################
# 結果をプロットする
インポート matplotlib.pyplot as plt

# 黒は削除され、代わりにノイズに使用されます。
unique_labels = set(labels)
colors = [plt.cm.Spectral(each)          for each in np.linspace(0, 1, len(unique_labels))]
for k, col in zip(unique_labels, colors):
    if k == -1:
        # 黒はノイズに使用されます。
        col = [0, 0, 0, 1]

    class_member_mask = (labels == k)

    xy = X[class_member_mask & core_samples_mask]
    plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
             markeredgecolor='k', markersize=14)

    xy = X[class_member_mask & ~core_samples_mask]
    plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
             markeredgecolor='k', markersize=6)

plt.title('推定されたクラスターの数: %d' % n_clusters_)
plt.show()


関連リンク: 


http://shiyanjun.cn/archives/1288.html
https://en.wikipedia.org/wiki/DBSCAN 
https://www.cnblogs.com/hdu-2010/p/4621258.html
http://blog.csdn.net/itplus/article/details/10088625
https://www.cnblogs.com/pinard/p/6208966.html
http://blog.csdn.net/xieruopeng/article/details/53675906
http://www.cnblogs.com/aijianiula/p/4339960.html
http://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html


 


post
  • 11

    item of content
クラスタリング分析は群分析とも呼ばれ、(サンプルまたは指標の)分類問題を研究するための統計的分析方法であり、同時にデータマイニングにおける重要なアルゴリズムでもあります。

クラスタリング(Cluster)分析はいくつかのパターン(Pattern)から構成されています。通常、パターンは測定値(Measurement)のベクトルであるか、多次元空間内の一点です。

クラスタリング分析は相似性に基づいており、同一クラスタ内のパターン間には、異なるクラスタに属するパターン間よりも多くの相似性があることが特徴です。このため、クラスタリング分析はデータ内の自然なグループやパターンを見つけ出すのに非常に有用です。