Left blob P1(1,1) P2(2,1) P3(1.5,2) P4(2,2)
Straggler P5(3.2,1)
Outlier P6(5,5)
Right blob P7(8,8) P8(9,8) P9(8.5,9) P10(9,9)
P1's neighborhood within 1.5: P1, P2 (d=1), P3 (d=1.118), P4 (d=1.414)
→ 4 ≥ 3 → CORE
P2's neighborhood: P2, P1, P3, P4, P5 (d=1.2) → 5 → CORE
P5's neighborhood: P5, P2 → 2 → not core
but P2 is core and within 1.5 → BORDER of cluster 0
P6's neighborhood: P6 alone → 1 → NOISE (−1)
P7–P10 mirror P1–P4 → all CORE
connectivity: P1–P2–P3–P4 are mutually reachable through core points
→ cluster 0; P7–P8–P9–P10 → cluster 1
result: 2 clusters · 8 core · 1 border · 1 noise
Now leave the points alone and turn one dial:
eps = 1.0, minPts = 3
P2 and P4 have exactly 3 neighbors each (self + 2) → they stay core
P1 and P3 have only 2 → they become border points of cluster 0
P5 is 1.2 from P2, outside eps → it becomes NOISE
result: 2 clusters · 4 core · 4 border · 2 noise
eps = 1.5, minPts = 5
only P2 has 5 neighbors; it seeds cluster 0 all by itself
every point of the right blob has 4 neighbors → no seed → all NOISE
result: 1 cluster · 1 core · 4 border · 5 noise
Both moves make the same point: DBSCAN’s output is a function of the dataset and the two dials, and the dials have no universal right answer. Plot eps against the number of clusters and noise points, pick the plateau, and let the domain — not just the chart — break the tie.