DBSCAN, point by point


Dataset
Radius (ε) 30 px
minPts counting the point itself
Run

The one question. DBSCAN never computes a center. It only ever asks, of one point at a time: are there at least minPts points within ε of me? If yes, that point is core and the cluster grows through it — every point inside its circle is swallowed, and each of those gets asked the same question. If no, the point is parked as noise, though a later cluster may still reach it and claim it as a border point. The pale blobs are the union of the ε-circles of every core point, which is exactly what a DBSCAN cluster is.

Three things worth trying.

1. Two rings, ε = 30. Press Run and watch one cluster crawl the whole way around a ring and stop. This is the case k-means cannot do at any k: its boundaries are straight lines, and no straight line separates two circles that share a center. DBSCAN never draws a boundary at all — it just follows contact.

2. Smiley, ε = 30. Three clusters and nobody supplied k: two eyes and a mouth, with the long curve kept in one piece — the exact answer k-means cannot reach at any k. And it is not a lucky setting: you get the same three clusters anywhere from ε = 20 to 60. Push ε down to 15 instead and it fragments into seven pieces — too short a reach and the algorithm loses the thread along the curve.

3. Elongated — two long thin clusters, the identical points used on the k-means and GMM pages. At the default ε = 30 you get 3 clusters, not 2: the cigars are sparse along their length, so one of them snaps in the middle (82 points and a stray group of 5). Nudge ε up to 35 and it settles on the right answer — 86 and 88 points, 6 noise. Shape was never the problem: DBSCAN does not care that a cluster is stretched, only whether the points are close enough to chain along it. Compare with k-means on these same points, which puts about 40% of them in the wrong group and cannot be fixed by restarting.

4. Uniform, and sweep ε slowly. There is no structure in this data, so watch what the algorithm invents: at ε = 15 almost everything is noise (152 of 160) and it reports 2 clusters; by ε = 30 it claims 11; at ε = 40, 15; and by ε = 60 the whole canvas is a single cluster. Every one of those answers is a fiction. Now compare Gaussian mixture, which sits on 3 clusters from ε = 30 all the way to 70. Stability across parameters is the evidence that structure is real — an answer that moves when you breathe on the slider is not a finding.

Every point ends up as exactly one of three things.
KindTestDrawn as
Core at least minPts points within ε, counting itself a filled dot — the cluster expands through it
Border not crowded itself, but inside some core point’s circle a hollow ring — it joins the cluster but never expands it
Noise neither a small gray cross — it belongs to nothing
Why border points are the fiddly ones. A border point can sit inside the circles of two different clusters, and then it simply joins whichever one reaches it first — so it depends on the order the points happen to be visited. Core points never have this problem. It is the one place DBSCAN is not fully deterministic, and it only ever affects the fringe.