在 DBSCAN(基于密度的空间聚类应用与噪声)算法中,eps (Epsilon) 和 min_samples (MinPts) 是两个最核心的参数,它们共同定义了"什么是密度"以及"什么是簇"。
理解这两个参数,我们可以想象你在茫茫夜空中观察星星:
1. eps (Epsilon) - 邻域半径 (你的"视场范围")
eps 定义了一个点周围的"势力范围"或"邻域大小"。你可以把它想象成你手中望远镜的视场半径。
-
具体含义: 对于数据集中的任意一个点,以它为圆心,
eps为半径画一个圆(在高维空间中是一个超球体)。这个圆内包含的所有其他点,都被认为是该点的"邻居"。 -
参数影响:
-
eps设得太小: 就像你的望远镜视野太窄,即使星团很密集,你也只能看到零星的几颗星星。这会导致原本属于同一个大簇的数据被切碎成很多小簇,或者大量的数据点因为找不到足够的邻居而被错误地标记为"噪声(Noise)"。 -
eps设得太大: 就像你的望远镜视野极其开阔,只要星星不是离得特别远,都能被框进去。这会导致原本分离的多个独立星团(簇)被连成一片,最终可能所有的数据都被归为了同一个巨大的簇,失去了聚类的意义。
-
2. min_samples (MinPts) - 最小样本数 (成为"核心"的门槛)
min_samples 定义了一个点要成为"核心点"的最低门槛。你可以把它想象成你认定一个区域为"星团"所需要的最小星星数量。
-
具体含义: 如果一个点的
eps邻域内(包括该点自身)包含的点数大于或等于min_samples,那么这个点就被提升为核心点 (Core Point)。核心点是构建簇的基石。 -
参数影响:
-
min_samples设得太小 (比如 1 或 2): 只要两三个点凑在一起,就能自封为一个簇。这会让算法对噪声非常敏感,任何微小的数据波动都会产生大量的微型簇。 -
min_samples设得太大: 要成为核心点的条件变得极其苛刻。只有那些数据极度密集的地方才能形成簇,而密度稍微低一点(但原本也是有意义的)的簇会被直接忽略,被视为噪声。通常,当数据集比较大或者含有较多噪声时,需要调大这个值以获得更稳定、更紧凑的聚类结果。
-
总结:它们如何共同作用?
DBSCAN 的运作逻辑就是:
-
先看一个点周围
eps范围内有没有达到min_samples个点。如果有,这个点就是"核心点"。 -
从一个"核心点"出发,把它的所有邻居都拉进同一个簇里。
-
如果被拉进来的邻居也是"核心点",那就继续扩大这个簇的边界(这就是所谓的密度可达,Density-Reachable)。
-
如果被拉进来的邻居不是"核心点"(也就是说它在别人的圈子里,但自己的圈子里点不够多),那就把它当作"边界点 (Border Point)",簇的扩张在这里停止。
-
那些既不是核心点,也不在任何核心点圈子里的孤单点,就是"噪声 (Noise)"。
为了帮助你更直观地理解这两个参数是如何塑造聚类结果的,我为你制作了一个交互式 DBSCAN 模拟器。你可以通过滑动条改变 eps 和 min_samples,观察数据点是如何在"核心点"、"边界点"和"噪声"之间转换,以及簇是如何合并或分裂的。
DBSCAN 是这样工作的:
-
算法拿起一个实验数据点,以
eps为半径画个圈。 -
如果圈里的实验点数量 \\ge
min_samples(这里是 5),这个点就成为"核心点"。 -
算法将这个核心点及其圈里的所有邻居划为一个"簇"。
-
算法接着去检查这些邻居,如果邻居也是"核心点",就继续把它们的圈子并进来,从而不断扩大这个"簇"的边界。
-
直到圈不到新的"核心点"为止,这个"簇"就成型了。
-
那些既不是核心点,也没有落在任何核心点圈子里的孤僻实验,就被标记为噪声 (
Is_Noise = True)。
策略
采用的"双层聚类(Dual-layer Clustering)"是一种极其专业且优雅的数据科学策略,尤其在结合主动学习(Active Learning)或贝叶斯优化(Bayesian Optimization)进行化学空间探索时,堪称教科书级别的设计。
为了让你彻底吃透这个策略的精髓,我们把这"两层"拆开来看,并探究它们为什么要这样组合。
第一层:联合聚类 (Joint Cluster) ------ 构建"大局观"
1. 运行环境 :二维 UMAP 降维空间。 2. 参与数据 :所有的历史实验 + C16 候选空间。 3. 核心目标 :提供全局上下文(Context),用于回答"我们在哪?"
原理解析: 当你利用模型生成了几百个候选的化学条件时,你最想知道的第一件事是:"这些新条件,离我之前做过的那些高产率实验近不近?"
UMAP 的强项在于保留数据的拓扑结构(Topology),即把本来有相似关联的东西放在一起。通过把历史数据和候选数据一起"扔"进 UMAP 降维并进行 DBSCAN 聚类,你就像是绘制了一张"化学世界地图":
-
如果候选点(紫 X)和高产点(深绿圆)被划到了同一个大簇(Joint Cluster)里,说明你在进行"利用(Exploitation)"------你在已知的高产区周围微调。
-
如果候选点像图里那样,自己孤立成一个巨大的星团,说明你在进行"探索(Exploration)"------你进入了一片前人(历史数据)未曾涉足的处女地。
比喻:这就好比用卫星地图看地球。你看得见新建的开发区(候选点)离老牌繁华市中心(高产点)有多远,中间有没有路连着。
第二层:候选亚群聚类 (Candidate Subcluster) ------ 精准的"微观刻画"
1. 运行环境 :原始的、高维的特征矩阵(Features)。 2. 参与数据 :仅仅 只有 C16 候选空间(排除了历史数据)。 3. 核心目标 :提供物理多样性(Diversity),用于回答"这批候选内部有什么区别?"
原理解析: 为什么不直接用第一层的结果去挑实验,非要搞第二层?这里面藏着两个极度硬核的数据科学常识:
-
痛点 A:UMAP 的视觉欺骗。 UMAP 为了把高维空间强行压扁到 2D 给人看,会严重扭曲真实的物理距离。在 UMAP 图上看着紧紧贴在一起的两个紫 X,可能在真实的高维化学空间中,一个温度是 35℃,另一个是 120℃。如果你根据 2D 聚类去挑条件,很可能会"踩坑"。
-
痛点 B:DBSCAN 的"嫌贫爱富"(密度干扰)。 DBSCAN 是基于密度的。历史实验数据通常在某些特定条件下扎堆(密度极高)。如果把历史数据和候选数据放在一起做高维聚类,历史数据的"高密度"会直接拉高算法对"簇"的判定门槛,导致原本内部有细微差别的候选数据,要么被强行挤成一个大面团,要么被全部判定为噪声(Noise)。
解决方案 : 切断历史数据的干扰,拿最纯粹的候选点,在最真实的高维空间(比如 15 维的温度、当量、配体浓度矩阵)里再跑一次 DBSCAN。 这样切出来的"亚群(Subcluster)",代表的是真实物理/化学条件上的差异。
比喻:这就像是你走进了刚才那个新建的开发区,放下了卫星地图,拿出了游标卡尺。你不关心这里离市中心有多远了,你只关心 1 号楼和 2 号楼的户型有什么本质区别。
为什么 1 + 1 > 2?(策略的终极意义)
双层聚类完美地服务于你的终极目的:从成百上千的候选空间中,科学地挑选出下一轮要做的 10 个实验。
这套策略为你提供了两个维度的"武器":
-
宏观防暴毙(Layer 1):通过观察联合聚类图,如果你发现候选点附近全是被标记为"死胡同(Noise)"的低产点,你可以直接在宏观上放弃这片区域。
-
微观保多样(Layer 2) :当你决定探索 C16 候选区时,你会发现 Layer 2 将这个区域划分为比如 5 个 Subcluster。在挑选那 10 个实验时,你就不应该从 Subcluster 1 里挑 10 个,而是应该在 5 个 Subcluster 里各挑 2 个。
结论: 通过第一层"看方向",通过第二层"挑样本"。这种结合了低维可视化拓扑与高维几何距离的架构,能够最大程度避免贝叶斯优化陷入"多样性崩塌",确保下一轮实验既有宏观依据,又有微观的化学代表性。