让 AI 走一遍 DBSCAN:边界点碰到两群,为何不能把它们连成一群

前天 3阅读

看见两堆点中间有一颗连接点,AI可能直接把它们解释成同一个DBSCAN簇。但DBSCAN扩展簇时,能够继续传播的是核心点。中间点若只是边界点,即使同时靠近两边,也未必能将两簇合并。

让 AI 走一遍 DBSCAN:边界点碰到两群,为何不能把它们连成一群

AI模型生成的概念插图:两处密集区域之间存在一个边界点;圆点数量和轮廓不对应正文坐标,不是软件运行截图。

先写完整邻域规则

采用二维欧氏距离,eps=1,距离恰好等于1也算邻居,min_samples=4,而且邻域计数包含点自身。所有样本等权,没有重复点。左侧四点是A=(-1,0)、B=(-1.8,0)、C=(-1.8,0.2)、D=(-1.8,-0.2);右侧四点是E=(1,0)、F=(1.8,0)、G=(1.8,0.2)、H=(1.8,-0.2)。桥点M=(0,0)。

一共九点。请先让AI列每点的邻居名称,再据数量判断身份,不要直接让它根据示意图涂颜色。scikit-learn的DBSCAN参数文档明确把自身算入min_samples;如果误删自身,本例部分点会被错误降为非核心。

桥点有邻居,但密度不够

A到左侧其余三点的距离都小于1,到M恰为1,所以A的邻域是A、B、C、D、M,共5点。B、C、D各自都包含左侧四点,共4点。右侧对称,E有5点,F、G、H各有4点。这八点全部满足核心条件。

M到A与E的距离恰为1,到其他点的距离都超过1,所以其邻域只有M、A、E,共3点,未达到4。M不是核心点,但靠近核心点,因此可以作为边界点归入某个簇。它并不是因为“不够密”就必然被当作噪声。

从A扩展时,可以沿左侧核心点继续搜索,并把M纳入边界;到M处不能再通过它把E扩展进来。右侧核心点之间会形成另一簇。因此核心结构保持两个簇,不能把所有距离不超过eps的边都连起来后,直接用普通连通分量代替DBSCAN。

哪些变化只是编号,哪些真的改成员

M同时邻接两个不同核心簇。scikit-learn说明,这类非核心样本可分给遍历时先形成的簇;换输入顺序,M可能换边,而两堆核心点的分群保持一致。比较两次结果时应先按成员集合对齐,不能仅凭簇编号从0换成1就认定算法不稳定。

把min_samples从4改成3,其他条件保持不变,M便成为核心点。此时A、M、E形成核心传播链,两侧能够合为一簇。变化的关键是M获得继续扩展的资格,不是坐标或距离发生了变化。

人工可复核三份清单:九个点的邻域计数应为5、4、4、4、5、4、4、4、3;阈值4时核心点有8个;阈值3时有9个。再让AI分别说明M属于边界还是核心,以及它能否把左右连接起来。

eps表示局部邻居距离,不是簇的最大直径。长链状核心区域可以延伸很远;反过来,不同密度群体也未必适合共享同一个阈值。真实数据的单位、缩放和距离定义都要先确定,本文的1与4只是用于展示扩簇规则的教学设定。

资料核对日期:2026年10月2日。算例为原创教学设定,已用独立Python计算复核,不代表真实模型训练或性能测试。

参考资料

scikit-learn:DBSCAN参数定义

scikit-learn:DBSCAN核心点与遍历顺序

文章版权声明:除非注明,否则均为云鹊BLOG原创文章,转载或复制请以超链接形式并注明出处。