DBSCANシミュレーター 戻る
機械学習シミュレーター

DBSCANシミュレーター — 密度ベースクラスタリング

2D散布データに対し DBSCAN を実時間で適用。εとMinPtsを変えて、コア点・境界点・ノイズの判定と任意形状クラスタの検出を学べます。

パラメータ設定
ε(近傍半径)
MinPts
強調するクラスタID
データシード

70点(3クラスタ + 一様ノイズ)を固定シードの LCG で決定論的に生成します。強調IDが 0 のときは全クラスタを表示します。

計算結果
検出クラスタ数
ノイズ点数
コア点数
境界点数
2D散布図とクラスタ判定

塗りつぶし=コア点/輪郭のみ=境界点/灰色の×=ノイズ/色=クラスタID(凡例右上)

理論・主要公式

DBSCAN は距離 d(ここではユークリッド距離)と 2 つのパラメータ ε, MinPts で密度を定義し、密度の連結成分をクラスタとして取り出します。

点 p の ε 近傍:

$$N_\varepsilon(p) = \{\, q \in D \mid d(p,q) \le \varepsilon \,\}$$

コア点の判定(ε 内に MinPts 以上の点を持つ):

$$|N_\varepsilon(p)| \ge \mathrm{MinPts}$$

コア点 p から q への直接到達可能性:

$$q \in N_\varepsilon(p) \;\wedge\; p \text{ がコア点}$$

コア点同士を辺で結んだグラフの連結成分がクラスタ、コア点の ε 内にいる非コア点は境界点として同クラスタに加えます。どのコア点の ε 内にも入らない点はノイズ(クラスタ ID = −1)です。

DBSCANシミュレーターとは

🙋
DBSCAN って k-means とどう違うんですか? どちらも「クラスタを作る」って習いましたが、何が違うのかピンとこなくて。
🎓
ざっくり言うと、k-means は「クラスタを何個に分けるか」を最初に決めて、各点を最も近い重心に押し込む方法だ。だから三日月や輪のような形は綺麗に分けられない。DBSCAN は「密度の濃いところがクラスタ、薄いところはノイズ」と発想を変えていて、クラスタ数を決めなくていいし、形も自由だ。上のシミュレーターの C クラスタ(円弧状)を見てごらん、ちゃんと曲がった形のまま 1 つのクラスタになっているだろう?
🙋
なるほど!「ε」と「MinPts」のスライダーを動かすと結果がガラッと変わりますね。ε を 0.3 まで下げたら、ほとんど全部がノイズになっちゃいました。
🎓
それが DBSCAN の核心だ。ε は「どの距離までを近所とみなすか」、MinPts は「近所にこれだけ集まっていれば密集の中心(コア点)と認めるか」。ε を小さくすると、密集と認められる点が減り、孤立した点は全部ノイズに落ちる。逆に ε を 2.0 まで上げると、3 つのクラスタがくっついて 1 つの巨大クラスタになるはずだ。試してみて。
🙋
本当だ!全部が C1 になりました。じゃあ実務ではどう ε を決めるんですか?
🎓
定番は「k 距離プロット」だ。各点から MinPts 番目に近い隣人までの距離を全点ぶん計算して、昇順に並べた折れ線を描く。グラフが急に上向きに曲がる「肘点」の距離がだいたい良い ε になる。例えば顧客の購買位置データなら「半径 200m に 5 人以上いれば商圏の中心」のように、業務上の物理的意味から決めることも多いよ。
🙋
塗りつぶしと輪郭の違いは何ですか?
🎓
塗りつぶしがコア点、輪郭だけが境界点だ。コア点は「自分の周りに仲間がたくさんいる」点で、境界点は「自分は仲間が少ないけど、隣にコア点がいるから引き込まれた」点。ノイズは灰色の × で表される。データの「骨格」と「縁」と「外れ値」を視覚的に分けられるのが DBSCAN の強みなんだよ。

よくある質問

クラスタ数があらかじめ分かっていて、データの分布が概ね球状なら k-means が高速で扱いやすいです。クラスタ数が未知、形状が複雑、外れ値の自動除外が欲しい場合は DBSCAN が向きます。一方で DBSCAN は密度に大きな差があるデータ(クラスタごとに密度が違う)には弱く、その場合は HDBSCAN や OPTICS への切り替えを検討します。
MinPts は次元 d に対し 2d 程度から始め、ノイズが多いデータでは少し大きめにします(2D なら 4〜10)。ε は MinPts−1 番目の最近傍距離をソートした「k 距離プロット」の肘点から読み取るのが標準的です。業務的な意味(商圏半径、センサ誤差など)から物理量として与えるアプローチも有効です。
原理的には可能ですが、「次元の呪い」で距離が一様化し、ε の有効範囲が極端に狭くなります。実務では PCA や UMAP・t-SNE で 2〜10 次元に圧縮してから DBSCAN を適用するのが一般的です。また計算量は素朴実装で O(n²)、kd-tree などで近傍探索を加速しても次元が高いと効きにくくなります。
OPTICS は ε を 1 点に固定せず「到達可能距離」を全データで描き、後から階層を切り出す手法です。HDBSCAN はさらに進んで ε を消し、密度の階層構造から安定なクラスタを自動抽出します。クラスタ密度が大きく異なる、または ε を決めにくいケースでは HDBSCAN がデファクトスタンダードになりつつあります。

実世界での応用

地理空間データの分析:GPS 軌跡から「滞在地」を抽出する、店舗位置から商圏を発見する、犯罪発生地点からホットスポットを検出する、といった用途で DBSCAN が広く使われます。緯度経度の物理距離から ε を自然に決められるのが大きな利点で、密度の薄い領域を自動的にノイズとして除外できます。

異常検知:センサデータやログを 2 次元・低次元に圧縮し、DBSCAN をかけて「どのクラスタにも入らない点(ノイズ)」を異常候補として抽出する手法はシンプルで強力です。ラベル付きデータが少ない初期段階のモニタリングで重宝されます。

画像セグメンテーション・点群処理:LiDAR や深度カメラの点群から、地面・壁・物体を密度ベースで分離する前処理として使われます。クラスタの個数が事前に分からない、形状も多様という条件にうまく適合します。

顧客セグメンテーションと外れ値分析:マーケティング分析で、購買行動の似た顧客群を密度から自動抽出し、外れ値となる顧客を別途レビューする、といった使い方ができます。事前にクラスタ数を仮定しなくて良いため、未知の顧客層を発見する探索的分析に向いています。

よくある誤解と注意点

最も多い誤解は、「ε を大きくすればクラスタが綺麗にまとまる」と考えることです。ε を上げると、本来別のクラスタだったものが密度の橋でつながり、1 つの巨大クラスタに潰れます。シミュレーターで ε を 1.5 や 2.0 にしてみてください。クラスタ A・B・C が連結して、検出クラスタ数が 1〜2 に落ちます。逆に小さすぎると全点がノイズになります。「適切な ε」は「クラスタの内部距離 < ε < クラスタ間距離」のスイートスポットで、k 距離プロットの肘点を必ず確認しましょう。

次に多いのが、「DBSCAN は外れ値を完璧に除去できる」と思い込むことです。DBSCAN がノイズと判定するのは「密度の薄い領域の点」だけで、密集した偽データやセンサ系統誤差は丸ごとコア点として取り込まれてしまいます。ノイズ判定はあくまでも密度ベースであり、データの品質チェックや前処理の代替にはなりません。

最後に、距離尺度の前処理を忘れがちな点に注意してください。DBSCAN は ε をすべての軸に同じ単位で使うため、スケールの違う特徴量(例:年齢[歳]と年収[円])をそのまま入れると、スケールの大きい軸だけで距離が決まり、他の軸の情報が消えます。実務では必ず標準化(StandardScaler、MinMaxScaler 等)を済ませてから DBSCAN に渡すこと。これを怠ると「結果が変だが原因が分からない」という典型的なつまずきになります。