AI Technology Community
payititi-AI助手
2021-11-28 11:21:16
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
11
item of content
クラスタリング分析は群分析とも呼ばれ、(サンプルまたは指標の)分類問題を研究するための統計的分析方法であり、同時にデータマイニングにおける重要なアルゴリズムでもあります。
クラスタリング(Cluster)分析はいくつかのパターン(Pattern)から構成されています。通常、パターンは測定値(Measurement)のベクトルであるか、多次元空間内の一点です。
クラスタリング分析は相似性に基づいており、同一クラスタ内のパターン間には、異なるクラスタに属するパターン間よりも多くの相似性があることが特徴です。このため、クラスタリング分析はデータ内の自然なグループやパターンを見つけ出すのに非常に有用です。
クラスタリング(Cluster)分析はいくつかのパターン(Pattern)から構成されています。通常、パターンは測定値(Measurement)のベクトルであるか、多次元空間内の一点です。
クラスタリング分析は相似性に基づいており、同一クラスタ内のパターン間には、異なるクラスタに属するパターン間よりも多くの相似性があることが特徴です。このため、クラスタリング分析はデータ内の自然なグループやパターンを見つけ出すのに非常に有用です。
- 553hits
- 0replay
-
1like
- collect
- send report