DBSCAN (ノイズを伴うアプリケーションの密度ベースの空間クラスタリング) アルゴリズムは、同様の特性を持つデータ ポイントをクラスにクラスタリングし、外れ値を識別できる密度ベースのクラスタリング手法です。 Python では、scikit-learn ライブラリの DBSCAN 関数を呼び出すことで、このアルゴリズムを簡単に実装し、データのクラスター分析を迅速に実行できます。この記事では、Python の DBSCAN アルゴリズムを詳しく紹介します。
1. DBSCAN アルゴリズムの基本
DBSCAN アルゴリズムは密度ベースのクラスタリング アルゴリズムであり、その基本的な考え方は、データ ポイントの密度がより高い領域でクラスターを形成することです。アルゴリズムには、近傍半径 (ε) と最小サンプル数 (MinPts) という 2 つの重要なパラメーターがあります。近傍半径とは、ある点を中心として、εを半径とする円内にあるすべてのデータ点をその点の近傍と呼び、最小サンプル数とは近傍内のデータ点の最小数を指します。ドメイン内のデータ ポイントの数が MinPts 未満の場合、そのポイントはノイズ ポイントとみなされます。
アルゴリズムの中心は、各ポイントの密度を計算することによってデータ ポイントをクラスター化することです (密度は、ポイントの近傍半径内に含まれるポイントの数です)。具体的には、アルゴリズムはラベルのないポイントから開始し、密度のしきい値に達するか、他のポイントがクラスターに参加できなくなるまで、そのポイントの近傍にある他のポイントの密度を計算することでクラスター サイズを再帰的に拡大します。
最後に、アルゴリズムはクラスター内のすべてのラベルのないポイントをクラスターのメンバーとしてマークし、未訪問のポイントから開始点として新しいラベルのないポイントを選択し、再帰的拡張を続行します。このプロセスは、ラベルのない点がなくなるまで繰り返され、クラスタリング プロセスが終了します。
2. Python の DBSCAN 関数
Python では、scikit-learn ライブラリの DBSCAN 関数を呼び出すことで DBSCAN アルゴリズムを簡単に実装できます。この関数の構文は次のとおりです:
sklearn.cluster.DBSCAN(eps=0.5,min_samples=5,metric='euclidean',algorithm='auto',leaf_size=30,p=1,n_jobs =なし)
このうち、epsは近傍半径、min_samplesは最小サンプル数、metricは距離測定方法、algorithmは計算方法、leaf_sizeはリーフノードサイズ、pはミンコフスキーを表します。インデックス、n_jobs はタスクの数を表します。
3. DBSCAN クラスタリングに Python を使用する
以下では、特定の例を使用して、DBSCAN クラスタリングに Python を使用する方法を示します。
まず、関連するライブラリをインポートしてランダム データ セットを生成する必要があります。コードは次のとおりです。
from sklearn.datasets import make_blobs import numpy as np import matplotlib.pyplot as plt X, _ = make_blobs(n_samples=1000, centers=5, random_state=42)
次に、以下に示すように、データ ポイントの分布グラフを描画できます。
plt.scatter(X[:, 0], X[:, 1]) plt.show()
次に、DBSCAN 関数を使用してクラスター分析を実行できます。コードは次のとおりです:
from sklearn.cluster import DBSCAN dbscan = DBSCAN(eps=0.5, min_samples=5) dbscan.fit(X)
その中で、データ ポイントの感度クラスタリングは、eps パラメータと min_samples パラメータを設定することで調整されます。 eps が小さすぎて min_samples が大きすぎる場合、クラスタリングの効果は相対的に弱くなります。eps が大きすぎて min_samples が小さすぎる場合は、異なるクラスターを分離することが困難になります。
eps パラメータと min_samples パラメータを調整して、クラスタリング効果の変化を観察できます。コードは次のとおりです。
eps_list = [0.1, 0.3, 0.5, 0.7] min_samples_list = [2, 5, 8, 11] fig, axes = plt.subplots(2, 2, figsize=(10, 8)) axes = axes.flatten() for i, (eps, min_samples) in enumerate(zip(eps_list, min_samples_list)): dbscan = DBSCAN(eps=eps, min_samples=min_samples) dbscan.fit(X) unique_labels = set(dbscan.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 = (dbscan.labels_ == k) xy = X[class_member_mask] axes[i].scatter(xy[:, 0], xy[:, 1], s=50, c=col) axes[i].set_title(f"eps={eps}, min_samples={min_samples}") axes[i].axis('off') plt.tight_layout() plt.show()
上記のコードを実行すると、以下に示すように、eps パラメータと min_samples パラメータのさまざまな組み合わせでクラスタリング効果を得ることができます。
上記より この図から、eps=0.5 および min_samples=5 のとき、クラスタリング効果が最も優れていることがわかります。4. DBSCAN の長所と短所
DBSCAN クラスタリング アルゴリズムには次の利点があります:
事前にクラスターを指定することなく、あらゆる形状のクラスターを検出できます。クラスターの。 異常値や異常値を検出できます。以上がPython による DBSCAN アルゴリズムの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。