DBSCAN (Density-Based Spatial Clustering of Applications with Noise)
密度ベースのクラスタリングと異常検出に使用されるDBSCANを解説します。Ultralytics YOLO26と併用して、データセット内の任意形状とノイズを特定する方法を学びます。
DBSCAN(ノイズを含む密度ベースの空間クラスタリング)は、密度に基づいてデータ内の明確なグループを特定するために使用される強力な教師なし学習アルゴリズムです。球状のクラスターを仮定したり、あらかじめグループ数を指定したりする従来のクラスタリング手法とは異なり、DBSCANは低密度の領域で分離された高密度の領域を特定します。この機能により、任意の形状やサイズのクラスターを発見できるため、基礎となる構造が不明な複雑な現実世界のデータセットの分析に非常に効果的です。このアルゴリズムの主な利点は、組み込みの異常検出機能です。低密度の領域にある点をクラスターに無理に割り当てるのではなく、自動的にノイズとして分類します。
主要な概念とパラメーター#
このアルゴリズムは、各データポイントの周囲に近傍を定義し、その範囲内に入る他のポイントの数を数えることで動作します。この処理は2つの主要なハイパーパラメーターによって制御され、データ固有の特性に合わせるには慎重なハイパーパラメーター調整が必要です。
- Epsilon(eps): このパラメーターは、近傍点を検索するためにポイントの周囲に設定する最大半径を指定します。「到達可能性」の距離を定義します。
- 最小ポイント数(minPts): Epsilonの半径内に必要なデータポイントの最小数を設定し、密度の高い領域、つまり「コア」を形成します。
これらのパラメーターに基づき、DBSCANはデータセット内のすべてのポイントを次の3種類のいずれかに分類します。
-
コアポイント:
minPts個以上の近傍点がepsの半径内にあるポイントです。これらのポイントがクラスターの内部を形成します。 -
ボーダーポイント: コアポイントから
epsの半径内にあり、自身の近傍点がminPts個未満であるポイントです。これらのポイントがクラスターの境界を形成します。 -
ノイズポイント: コアポイントでもボーダーポイントでもないポイントです。これらは実質的に外れ値として扱われ、外れ値検出などのタスクに役立ちます。
DBSCANとK-Meansクラスタリングの比較#
どちらも機械学習(ML)の基本的な手法ですが、特定のシナリオではDBSCANがK-Meansクラスタリングに対して明確な利点を提供します。K-Meansは重心とユークリッド距離に依存し、クラスターが凸形または球形であることを仮定することが多くあります。そのため、細長い形状や三日月形のデータでは性能が低下する可能性があります。一方、DBSCANの密度ベースのアプローチは、データ分布の自然な輪郭に沿って処理できます。
もう1つの大きな違いは初期化にあります。K-Meansでは、事前の知識がない場合に難しいことがあるクラスター数(k)を、ユーザーがあらかじめ指定する必要があります。DBSCANは、データの密度からクラスター数を自然に推定します。さらに、K-Meansはすべてのポイントをいずれかのグループに割り当てるため、外れ値の影響を受けやすく、クラスターの中心が歪む可能性があります。DBSCANはポイントをノイズとしてラベル付けできるため、データの異常が有効なクラスターに混入するのを防ぎ、予測モデリングなどの下流タスクでよりクリーンな結果を実現します。
実世界での利用例#
DBSCANは、空間分析と堅牢なノイズ処理が求められる業界で広く利用されています。
- 地理空間分析: 都市計画や物流では、分析担当者がDBSCANを使用して、配送車両やライドシェアサービスから得られるGPS座標をグループ化します。密度の高い配送先ゾーンを特定することで、企業は経路計画や倉庫の立地を最適化できます。たとえば、物流におけるAIでは、効率を高めるために配送先をクラスタリングすることがよくあります。
- ビジョンベースの異常検出: 製造業では、YOLO26などのモデルを利用した外観検査システムで、表面の欠陥を検出することがあります。DBSCANは、製品マップ上のこれらの欠陥の座標をクラスタリングできます。孤立した検出結果はセンサーノイズとして除外し、密度の高いクラスターは体系的な製造上の欠陥を示すものとして、品質検査のアラートを発生させることができます。
コード例:検出された重心のクラスタリング#
コンピュータービジョンのワークフローでは、開発者がUltralytics Platformを使用して物体検出器をトレーニングし、その後に結果を後処理することがよくあります。次の例では、sklearn ライブラリを使用して、検出されたオブジェクトの重心をクラスタリングする方法を示します。これにより、空間的に関連する検出結果をグループ化し、同じオブジェクトに対する複数のバウンディングボックスを統合したり、オブジェクトのグループを特定したりできます。
import numpy as np
from sklearn.cluster import DBSCAN
# Simulated centroids of objects detected by YOLO26
# [x, y] coordinates representing object locations
centroids = np.array(
[
[100, 100],
[102, 104],
[101, 102], # Cluster 1 (Dense group)
[200, 200],
[205, 202], # Cluster 2 (Another group)
[500, 500], # Noise (Outlier)
]
)
# Initialize DBSCAN with a radius (eps) of 10 and min_samples of 2
# This groups points close to each other
clustering = DBSCAN(eps=10, min_samples=2).fit(centroids)
# Labels: 0, 1 are cluster IDs; -1 represents noise
print(f"Cluster Labels: {clustering.labels_}")
# Output: [ 0 0 0 1 1 -1]ディープラーニングとの統合#
DBSCANは古典的なアルゴリズムですが、最新のディープラーニングと効果的に組み合わせることができます。たとえば、畳み込みニューラルネットワーク(CNN)から抽出した高次元の特徴を、DBSCANを適用する前にPCAやt-SNEなどの次元削減手法で削減できます。このハイブリッドアプローチにより、単なるピクセル位置ではなく、意味的な類似性に基づいて複雑な画像データをクラスタリングできます。これは、ラベル付きのトレーニングデータが不足している教師なし学習のシナリオで特に有用であり、研究者が膨大な未ラベル画像のアーカイブを効率的に整理するのに役立ちます。









