想象你走进一个大型派对:有的人扎堆在吧台聊得火热,有的人沿着沙发蜿蜒成一条“人链”,还有一两个角落里的独行者。没有人发号施令,人群却自然分成了几个小圈子。聚类的任务,就是把这场派对上的宾客划分成一个个“朋友圈”—但事先没人告诉你谁和谁是一伙的,也没人告诉你该分几组。传统方法 K-Means 的思路是“找几个中心点画圆”,它假设圈子都是圆形的,可现实中的朋友圈哪有那么规整?有的圈子是长条形的,有的围成环形,还有人不属于任何圈子。DBSCAN(基于密度的空间聚类)换了个思路:不看“你离哪个中心近”,而看“你身边聚集了多少人”。它像一个善于引荐的社交达人,从人气最旺的人开始,一圈一圈地介绍、扩圈,把高密度区域串成簇,同时把落单的人自动标记为噪声。本篇就以这场派对为线索,拆解 DBSCAN 的密度原理、三类点、两个参数,以及它与 K-Means 的恩怨情仇。
学会 DBSCAN,你就能在真实数据里发现任意形状的簇、自动揪出噪声,处理 K-Means 搞不定的环形与带状结构——这是机器学习工程师做无监督分析的必备武器。
可视化演示
动态演示DBSCAN的核心机制,通过源头/管道/节点/终端四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
DBSCAN:DBSC DBSCAN核心思想与密度聚类 eps邻域与密度直达密度可达 核心机制可视化 DBSCAN整体架构与关键组件
密度聚类思想
假设你是派对的场务,散场后要把宾客按“朋友圈”分组报销打车费。你手中没有名单,只看得到每人此刻站在哪儿——吧台边围着一大团人,沙发那边拖着一条蜿蜒的人链,窗边还站着两个独自发呆的家伙。你很快发现:想分圈,“谁站在谁旁边、旁边围了多少人”才是最可靠的信息,这就是“密度”。
传统的 K-Means 走的是另一条路:它先随手画几个“圆心”,再让每个人投奔最近的圆心。可圆心模型天然假设簇是圆形的,而真实世界里的“朋友圈”什么形状都有。DBSCAN 换了个工具——它给每个点画一个半径固定的小圆圈(邻域),数一数圆圈里盛了多少人,用局部密度来刻画热闹程度。
正式定义:设数据集为 $D$,对任意点 $p$,它的 $\epsilon$ 邻域是半径 $\epsilon$ 范围内所有点的集合。邻域内点数越多,说明该点越“热闹”;热闹的区域连成片就是簇,冷清的区域自然成为簇与簇之间的隔离带。整个过程不需要任何标签,也不需要预设分成几组——这正是“无监督聚类”的含义。
拿着这个半径固定的“社交圈”在会场走一圈,你根本不用知道派对上有几拨人——人挤人的地方自然连成片,冷清角落自动变成分界线。密度聚类思想的全部起点,就是这么朴素。
- 邻域符号$N_{\epsilon}(p)$ 表示点 $p$ 的 $\epsilon$ 邻域这个集合——可以理解为“p 的社交圈名单”。
- 从全体数据中挑人$\{q\in D\}$ 表示在数据集 $D$ 里逐个考察候选点 $q$——相当于“从全场宾客中挑人进名单”。
- 距离门槛$d(p,q)\le \epsilon$ 表示 $p$ 与 $q$ 的直线距离不超过 $\epsilon$——“只有站在社交半径以内才算朋友”。
三种点类型
有了“社交圈”,宾客立刻分成三种。想象派对上:Tina 身边围了七八个朋友,她是“社交达人”;小明虽然自己只认识两个人,但正站在 Tina 旁边,属于圈子边缘的“安静成员”;角落里的 Bob 谁都不认识,也没人靠近他,是“独行侠”。这三类人对应到 DBSCAN,就是核心点、边界点、噪声点。
判定只靠两件事:这个点周围够不够“热闹”(邻居数是否达到 MinPts),以及它身边有没有核心点。核心点靠自己的“人气”撑起一个簇;边界点虽然人气不足,但沾了核心点的光,也算圈子的一员;噪声点既没人气、又远离所有达人,被排除在一切簇之外。
核心点的判定条件如下:当邻域内点数不小于 MinPts 时,点 $p$ 就是核心点。边界点指邻域内点数不足 MinPts、但落在某个核心点邻域内的点;两者都不是的,就是噪声点。
散场后清点宾客时,正是三类人各司其职:达人负责拉人扩圈,安静成员让圈子连成片、撑满任意形状,独行侠则被自动请出所有圈子。人群划分完成的同时,噪声也顺带被隔离出来了。
- 邻域计数$|N_{\epsilon}(p)|$ 是集合 $N_{\epsilon}(p)$ 的元素个数——即“p 的社交圈里到底有几个人”。
- 达人数目$MinPts$ 是一个预设的整数阈值——“主办方规定,认识几个人以上才算社交达人”。
- 人数比较$\ge$ 表示邻域人数达到或超过阈值——“人气达标,核心点身份坐实”。
eps邻域参数
$\epsilon$ 就是“社交半径”——你愿意走几步去和陌生面孔打招呼。半径太小,连身边的人都够不着,满场都是被孤立的“独行侠”;半径太大,整个会场的人都算熟人,所有圈子糊成一团,谁也分不清谁。这个参数直接决定邻域里的人数,也就决定了哪些点能当核心点,是 DBSCAN 最关键的旋钮。
$\epsilon$ 怎么选才靠谱?业内常用“k-距离图”。做法是:对每个点,算出它到第 $k$ 个最近邻居的距离($k$ 通常就取 MinPts),然后把这些距离从小到大排序,画成一条曲线。曲线像一只手臂:前半段平缓,说明大多数点周围密度高、邻居很近;到了某个点之后距离开始暴涨,说明进入了稀疏区——那个拐弯处,就是理想的 $\epsilon$。
如同派对前先估算会场密度:多数人 3 米内都有熟人,独行侠 10 米内都碰不到人——把手肘处的 3 米作为“社交半径”,既不漏掉圈子,又不把全场拉成一家。
- 第 k 近距离$d_k(p_i)$ 是点 $p_i$ 到第 $k$ 个最近邻居的距离——“从这个人往外数,第 k 个朋友离他多远”。
- 整体升序排列$d_k(p_1)\le d_k(p_2)\le\cdots\le d_k(p_n)$ 把这些距离从小到大排成一串——“把全场宾客按'第 k 近朋友的距离'从近到远排好队”。
- 看形态选值曲线平缓段与陡峭段之间的拐弯处,对应的纵坐标就是 $\epsilon$ 的合理初值——“多数人都在 3 米内有朋友,独行侠 10 米外都碰不到人,手肘处就是 3 米”。
MinPts阈值
MinPts 是“达人门槛”:一个人周围至少要凑够几个人,才配当核心点?门槛设高了,只有极少数超级人气王能牵头,圈子容易碎掉;门槛设低了,谁都能拉人,噪声也会被裹挟进圈里,聚类失去意义。它和 $\epsilon$ 一起,共同定义了什么叫“密度高”。
直观地,密度就是“单位面积里站了多少人”。把 $\epsilon$ 邻域看成一块圆形区域,密度就等于邻域人数除以圆面积。固定 $\epsilon$ 时,邻域人数越多密度越大,所以“邻域人数 ≥ MinPts”和“密度 ≥ 阈值”本质上是同一件事。
经验法则上,MinPts 通常取特征维度的两倍以上:二维数据至少取 4,高维数据相应增大。相比 $\epsilon$,MinPts 的敏感度更低,一般先定 MinPts,再通过 k-距离图去选 $\epsilon$,调参会顺手很多。
开派对时你也得规定“认识几个人以上算社交达人”:定得太苛刻,大多数圈子没人牵头;定得太宽松,边缘散客也被拉进来充数。合适的门槛配上合适的半径,派对分圈才既完整又不掺水。
- 邻域面积$\pi \epsilon^2$ 是半径为 $\epsilon$ 的圆面积——“社交圈这块地有多大”。
- 人数除以面积$|N_{\epsilon}(p)|$ 除以面积,得到单位面积人数——“每平方米站了几个人”。
- 等效判据人数多 ⇔ 密度大,所以“邻域人数 ≥ MinPts”与“密度 ≥ 阈值”等价——“查人数和查密度是一回事”。
密度可达与相连
核心点和参数都齐了,圈子怎么从一个人“长”成一圈人?靠的是介绍。Alice 认识 Bob,Bob 认识 Carol——即使 Alice 和 Carol 离得很远,只要中间有一串人引荐,她们也能进同一个圈子。DBSCAN 管这叫“密度可达”:若点 $q$ 在核心点 $p$ 的邻域内,称 $q$ 由 $p$“直接密度可达”;沿着一串核心点依次传递,就成了“密度可达”。
这条传递链可以很长,这正是 DBSCAN 能聚出任意形状的秘密:规则是局部的,连通却是全局的。两个边界点各自人气不足,但都能从同一个核心点出发被“密度可达”,于是它们之间是“密度相连”的,也会被收进同一个簇。最终,一个簇就是从某个核心点出发、把所有密度可达与密度相连的点收拢起来的最大集合。
派对圈子的形成正是这样:达人给身边人介绍,身边的人再给他们的身边人介绍……圈子像涟漪一样沿着人链蔓延,沙发上的长条队伍就是这么连起来的。人群围成的形状再奇怪,只要人链不断,就是一个圈。
- 链的起止$p_1=p,\ p_m=q$ 表示链条从 $p$ 出发、最终到达 $q$——“从你出发,经层层介绍到达 TA”。
- 逐跳入圈$p_{i+1}\in N_{\epsilon}(p_i)$ 表示每一步都在前一个人的邻域内——“每跳都由介绍人直接带进圈”。
- 核心中转$|N_{\epsilon}(p_i)|\ge MinPts$ 表示每一步的引荐人都是核心点——“只有社交达人才能继续往下介绍”。
- 可传递$i$ 从 1 取到 $m-1$,链条长度任意——“介绍链可以传很多层,直到圈子的尽头”。
K-Means对比
假如让 K-Means 来给这场派对分组,它会怎么做?先随手画 $k$ 个圈,把宾客按“离哪个圈心近”分配,然后不断挪动圈心直到安稳。问题在于:派对上的圈子是沿着吧台弯弯曲曲的,K-Means 画一个圆根本罩不住整条人链。
它的目标函数只关心“点到所属中心的距离平方和”,完全不看密度。因此无论数据长什么样,K-Means 分出来的簇总是近似球形的。环形的朋友群、半月形的沙发组,在它眼里都会被拦腰砍成两半。更麻烦的是噪声:Bob 站在远角落,K-Means 也会把他硬塞进某个圈子——因为它的规则是“每个人必须有归属”。而且它要求你预先告诉它 $k$ 是多少,可派对上到底有几拨人,我们事先并不知道。
相当于 K-Means 拿着圆规画圈,DBSCAN 拿着“人气探测器”顺着人链走。真实数据里没有完美的圆形部落,所以面对带噪声、形状自由的数据,DBSCAN 常常更贴近现实。
- 聚类中心$\mu_i$ 是第 $i$ 簇的中心——“每个假想圆的圆心”。
- 平方距离和$\|x-\mu_i\|^2$ 是点 $x$ 到其中心的距离平方,全部加起来——“所有人偏离圆心的总代价”。
- 最小化目标$\min$ 表示不断挪圆心让总代价最小——“圆心挪到最舒服的位置为止”。
- 对比启发这个目标只看“距离”,从不看“密度”,所以它画不出环形——“拿着圆规的人,永远画不出弯弯绕的圈子”。
任意形状聚类
什么形状都能聚,是 DBSCAN 最惊艳的地方。环形甜甜圈、弯月形、S 形人群——只要密度均匀、人链不断,都能被完整地串成一个簇。环形数据在 K-Means 眼里会被劈成两半,在 DBSCAN 眼里却是一个货真价实的整圈。
原理就藏在簇的定义里:一个簇是所有“密度相连”点的极大集合。两个点哪怕相隔很远,只要存在一个共同的核心点作为“中转站”,让它们都能沿密度链到达,它们就算一家人。环上的每个点都能通过身边邻居绕一整圈,于是“环形”不再被分割。
环形的朋友群、沿街排开的小吃摊队形,DBSCAN 都能照单全收。但要注意:全局只有一个 $\epsilon$,如果派对里“密集夜店区”和“稀疏露台区”同时存在,一个半径很难同时顾全两边的密度尺度——这正是它最大的软肋,也是 HDBSCAN 等改进算法的出发点。
- 共同中转点$\exists\, o\in D$ 表示存在某个点 $o$ 担任“介绍人”——“两人都认识同一位社交达人”。
- 两条可达链$p$ 从 $o$ 密度可达,$q$ 也从 $o$ 密度可达——“两人各自顺着介绍链走到达人身边”。
- 对称性$p$、$q$ 在式子中地位完全对等——“谁先认识谁不重要,能连上就算一家人”。
参数调优实战
像布置派对前先量场地,DBSCAN 调参也要按流程走,而不是瞎猜。第一步是特征标准化。$\epsilon$ 是绝对距离,如果特征单位不同(厘米混着千米),“社交半径”会完全失真,必须先让所有特征处于同一尺度。
第二步,画 k-距离图选 $\epsilon$:令 $k=$ MinPts,对每个点算出第 $k$ 近邻居距离并排序,取曲线肘部附近的距离作为 $\epsilon$ 初值。第三步,跑一遍 DBSCAN,用轮廓系数评估聚类质量,再小范围微调两个参数。调参时还可以结合可视化:把聚类结果画出来,盯着“该连的没连、不该连的连了”的地方对症下药。
就像调派对的灯光和音乐:先量场地(标准化),再定社交半径(k-距离图),最后看看各圈气氛(轮廓系数)。参数没有万能值,但有了流程和评估指标,你总能找到顺手的组合。
- 簇内距离$a(i)$ 是点 $i$ 与同簇伙伴的平均距离——“你和自己圈子的平均亲近程度”。
- 簇间距离$b(i)$ 是点 $i$ 到最近其他簇的平均距离——“你离别人圈子最近有多远”。
- 归一化比值$(b-a)/\max(a,b)$ 把结果压到 $-1$ 到 $1$ 之间——“把自己人和外人的距离差折算成得分”。
- 判读$s$ 接近 1 说明内外分明,接近 0 说明点在两簇边界,接近 $-1$ 说明可能分错——“得分越高,圈子越清爽”。
AI 应用场景
电商用户行为分群
阶段:无监督学习 / 用户画像构建
解决的问题:传统 RFM 模型配合 K-Means,只能把用户分成球形簇,还会被“双十一囤货狂”这类极端用户拉偏中心。DBSCAN 用密度发现任意形状的购买习惯圈——比如“每晚八点逛零食区的上班族”——并把刷单、机器注册等异常行为自动标为噪声,不再污染正常分群。
具体案例:某电商平台对 30 万用户的“浏览—加购—支付”行为向量做 DBSCAN,先用 k-距离图把 eps 定在 0.6 附近、MinPts 取 8,得到 5 个行为簇和约 2.1% 的噪声点。运营团队只对高密度簇做精准营销,跳过噪声人群后,营销转化率提升了 17%。
共享单车调度与地理热点挖掘
阶段:空间数据分析 / 特征提取
解决的问题:骑行起点 GPS 数据沿马路呈带状分布,K-Means 的圆形簇会把一条“热门骑行带”切成几段;偶发的低频骑行点又干扰热点判断。DBSCAN 顺着密度链把带状热点整条捞出,同时把低频点标为噪声,调度决策立刻清晰。
具体案例:某出行平台对夜间 20 万条骑行起点坐标做 DBSCAN(eps 取 80 米、MinPts 取 10),识别出 13 个带状或块状热点区域,自动过滤约 3% 的偶发点。调度员据此在热点边缘提前投放车辆,夜间车辆利用率提升 12%。
网络安全异常检测
阶段:异常检测 / 安全分析
解决的问题:正常流量在特征空间中聚成高密度簇,攻击流量则像“混进派对的独行侠”。监督学习需要大量标注样本,而攻击样本往往稀缺;DBSCAN 不需要标签,直接用密度把“不合群”的流量圈出来送审。
具体案例:某安全团队抽取连接时长、包大小、端口分布等特征,对一周流量做 DBSCAN。正常簇覆盖了 97% 的流量,剩下 3% 的低密度噪声被送进人工研判,最终发现 2 种此前未被规则命中的新型扫描攻击。
Python 演示
import math class DBSCAN: def __init__(self, eps=0.12, min_pts=4): self.eps = eps self.min_pts = min_pts def fit(self, X): n = len(X) labels = [-1] * n neighbors = [] for i in range(n): nb = [] for j in range(n): if i != j and self._dist(X[i], X[j]) <= self.eps: nb.append(j) neighbors.append(nb) cluster_id = 0 for i in range(n): if labels[i] != -1 or len(neighbors[i]) < self.min_pts: continue labels[i] = cluster_id queue = [i] while queue: p = queue.pop(0) if len(neighbors[p]) < self.min_pts: continue for q in neighbors[p]: if labels[q] == -1: labels[q] = cluster_id queue.append(q) cluster_id += 1 return labels def _dist(self, a, b): return math.sqrt(sum((x - y) ** 2 for x, y in zip(a, b))) def make_data(): pts = [] for i in range(40): a = i / 40 * 2 * math.pi pts.append([0.38 + 0.2 * math.cos(a), 0.5 + 0.2 * math.sin(a)]) for i in range(24): pts.append([0.76 + (i % 6) * 0.05, 0.5 + (i // 6) * 0.06]) for pos in [(0.05, 0.05), (0.95, 0.95), (0.05, 0.93), (0.95, 0.06), (0.5, 0.02), (0.03, 0.5)]: pts.append(list(pos)) return pts def main(): X = make_data() model = DBSCAN(eps=0.12, min_pts=4) labels = model.fit(X) sizes = {} for lab in labels: sizes[lab] = sizes.get(lab, 0) + 1 noise = sizes.pop(-1, 0) print("cluster count:", len(sizes)) for lab, s in sorted(sizes.items()): print("cluster", lab, "size:", s) print("noise size:", noise) print("ring cluster found as one:", len(set(labels[:40])) == 1) if __name__ == "__main__": main()
if i != j and self._dist(X[i], X[j]) <= self.eps:两两计算距离,把半径 eps 内的邻居记入 nb——相当于“数清每个人社交圈里有谁”。neighbors.append(nb)预计算所有点的邻居表,后续 BFS 扩圈时不用重复算距离。if labels[i] != -1 or len(neighbors[i]) < self.min_pts: continue已入簇或邻居数不够 MinPts 的点不配当“社交达人”,直接跳过。labels[i] = cluster_id给达人的核心点盖章,一个新圈子正式成立。if len(neighbors[p]) < self.min_pts: continue边界点已入圈但不再介绍朋友,防止圈子无边界蔓延。if labels[q] == -1: labels[q] = cluster_id把达人的邻居拉进圈子,并加入待办队列等待继续扩圈。print("ring cluster found as one:", len(set(labels[:40])) == 1)检查环形上 40 个点是否被连成同一个簇,验证任意形状聚类能力。
常见误区
误区“我把 eps 设大一点,所有点都算邻居,DBSCAN 不就能把所有该聚的都聚起来吗?反正多聚总比漏聚好。”
正解eps 是“社交半径”。半径太大,两个本不相干的高密度区会被连成一个巨大的簇,吧台圈和门口圈糊成一团;半径太小,圈子又碎成孤岛。正确做法是先用 k-距离图在肘部附近选初值,再结合轮廓系数微调,而不是贪大求全。
为何常见:大家在 K-Means 里习惯了“簇数可以先瞎猜再试”,迁移到密度参数时,对“绝对距离该取多大”没有直觉。
误区“DBSCAN 免费自动定簇数,我把数据丢进去等结果就行,是零参数算法!”
正解它确实不用指定 k,但 eps 和 MinPts 两个参数决定了什么叫“密度高”。参数不当,照样全聚成一坨或碎成渣。“自动定簇数”只说明簇数是结果而非输入,不等于“自动定密度标准”。
为何常见:各种资料反复强调“无需指定簇数”,让人误以为整个算法完全免调参。
误区“既然边界点邻居数不达标,那它和噪声点一样,不算聚类成员,反正都没用。”
正解边界点虽然自己的朋友圈小,但站在某个核心点的邻域内,通过核心点与整个簇相连,是簇的正式成员;噪声点四周都没有核心点,才真正被排除在簇外。结果标签上,边界点有簇编号,噪声点是 -1,地位完全不同。
为何常见:判定规则只分“核心 / 非核心”两步,容易让人把非核心的两类(边界点与噪声点)混为一谈。
误区“它能聚环形就说明它万能,数据里密度差再大也没关系。”
正解eps 是全局唯一的半径。派对的“夜店区”人挤人、“露台区”稀稀拉拉但隐约有圈,一个固定半径没法同时适配两种密度尺度:照顾了夜店就漏掉露台,照顾了露台就把夜店糊成一团。此时需要 HDBSCAN 这类自适应密度的改进算法。
为何常见:任意形状的演示案例太惊艳,掩盖了“全局固定密度阈值”这一前提假设。
面试题
Q1. DBSCAN 判断一个点是否属于某个簇的核心依据是什么?
- A.该点周围的局部密度高低← 正确答案
- B.该点与全局中心的距离
- C.该点坐标的数值大小
- D.该点被遍历的先后顺序
答案:A。DBSCAN 看的是“局部密度”——某个点周围是否聚集了足够多的人,就像派对上的人气热区。全局中心距离、坐标大小、遍历顺序都与聚类判断无关,那是 K-Means 或工程实现层面的东西。
Q2. 在 DBSCAN 中,下列哪种点真正属于某个聚类簇?
- A.核心点和边界点都可以← 正确答案
- B.只有核心点属于该簇
- C.只有边界点属于该簇
- D.核心点边界点都不属于
答案:A。核心点是“社交达人”,负责扩圈;边界点是达人的邻居,虽然自己人脉少,但人在圈内,也算簇成员。只有噪声点(既非核心又不在任何核心邻域内)被排除在簇外,所以 B、C、D 都片面。
Q3. 关于 eps 邻域半径的说法,正确的是?
- A.eps 必须选得越大越好
- B.eps 越小聚类效果越优
- C.eps 过大可能合并所有簇← 正确答案
- D.eps 与 MinPts 毫无关联
答案:C。eps 是“社交半径”,太大则全场皆友,所有簇连成一片;太小则人人孤岛。正确做法是用 k-距离图肘部选值,并与 MinPts 配合判断密度,绝不是越大越好或越小越好。
Q4. 某点的邻域内点数小于 MinPts,它可能是?
- A.一定是核心点成员
- B.一定是噪声点无疑
- C.可能是边界点成员← 正确答案
- D.一定不属于任何簇
答案:C。邻域人数不足 MinPts 只说明它不是核心点。它可能是沾了核心点光的边界点(属于簇),也可能四周空无一人而成为噪声。断定它“一定是噪声”是典型误解——边界点和噪声点的区别就在“身边有没有核心点”。
Q5. k-距离图在 DBSCAN 调参中的作用是?
- A.直接确定最终的簇数
- B.辅助选择 eps 的取值← 正确答案
- C.计算聚类的总距离和
- D.统计噪声点的具体数
答案:B。k-距离图把每个点到第 k 近邻的距离排序画成曲线,肘部是密集区与稀疏区的分界,肘部距离就是 eps 的合理候选。它不直接给出簇数、总距离或噪声数量,只是帮助定“社交半径”。
Q6. 与 K-Means 相比,DBSCAN 的优势包括?
- A.能发现任意形状的簇← 正确答案
- B.数据噪声可自动识别← 正确答案
- C.完全无需调节任何参数
- D.对环形数据表现良好← 正确答案
答案:ABD。DBSCAN 基于密度可达链,环形、半月形都能整簇连通(A、D 对);低密度离群点自动标为噪声(B 对)。但它仍有 eps 和 MinPts 两个参数要调,并非零参数(C 错)。
Q7. 关于密度可达关系的性质,正确的是?
- A.它能沿着核心链传递← 正确答案
- B.它只能传递一次结束
- C.它只有反对称的性质
- D.它只适用于噪声之间
答案:A。密度可达像“介绍链”:核心点 A 的邻居是 B,B 的邻居是 C,A 就能通过链式传递到 C,所以具有传递性。链可长可短,并非一次结束,也不只属于噪声或边界点的关系。
Q8. 下列哪种数据形态适合使用 DBSCAN 聚类?
- A.环形与半月形分布簇← 正确答案
- B.含有较多离群点数据← 正确答案
- C.密度差异巨大的数据
- D.标准球形分布的簇
答案:AB。环形半月靠“人链”连通,DBSCAN 擅长(A 对);离群点天然低密度,会被标成噪声(B 对)。各簇密度天差地别时,单一 eps 顾此失彼(C 不宜);标准球状簇用 K-Means 计算更省事(D 不宜)。
Q9. MinPts 参数的常用经验取值思路是?
- A.取特征维度的两倍以上← 正确答案
- B.直接取样本总量的一半
- C.等于聚类簇数再加一
- D.小于特征维度的两倍
答案:A。经验规则是 MinPts ≥ 2 倍维度:二维数据至少取 4,高维数据相应调大。它和样本总量、簇数没有固定关系,过小会把噪声收进簇,过大则让圈子失去牵头人。
Q10. 关于密度可达与密度相连的区别,正确的是?
- A.密度可达关系具有对称性
- B.密度相连关系具有对称性← 正确答案
- C.密度可达不需要核心点
- D.密度相连只针对噪声点
答案:B。密度可达不对称:边界点由核心点可达,反向则不行;密度相连要求两个点都从同一个核心点出发可达,是对称的。因此边界点之间能通过共同核心连成一股,C、D 均错误。