KeplerMapper Cover类深度讲解:n_cubes与perc_overlap如何决定图的精细度
KeplerMapper Cover类深度讲解:n_cubes与perc_overlap如何决定图的精细度
【免费下载链接】kepler-mapperKepler Mapper: A flexible Python implementation of the Mapper algorithm.项目地址: https://gitcode.com/gh_mirrors/ke/kepler-mapper
KeplerMapper 是一款灵活易用的 Python Mapper 算法实现,用于从高维数据中提取拓扑结构。它的核心组件Cover 类通过两个参数n_cubes与perc_overlap直接决定了最终拓扑图的精细度:格子切得越密、重叠越多,图就越细致。本文带你用最直观的方式理解这两个参数,并给出一份新手参数调优速查表 📊。
一瞥:Cover 类在 Mapper 算法中的位置
KeplerMapper 的 Mapper 算法分三步走(详见 docs/theory.rst):
- 投影(Project):把高维数据压成低维"镜头"(lens);
- 覆盖(Cover):用一堆相互重叠的超立方体格子盖住投影空间;
- 聚类(Cluster):每个格子里的点做聚类,簇变成图节点,重叠区域产生边。
Cover 类就负责第 2 步:根据n_cubes和perc_overlap自动计算每个格子的中心与半径,把镜头空间切割成网格。空格子会被自动剔除,所以最终图的节点数往往少于格子总数。
上图为 Cover 类切割镜头空间后经聚类连边得到的典型拓扑网络:节点大小代表簇内样本数,连线来自格子的重叠区域。
n_cubes:图的"分辨率"
n_cubes指每个维度上划分的超立方体数量,默认 10(定义见 kmapper/cover.py)。它相当于相机分辨率:
n_cubes=5:镜头空间被切成粗网格,每个格子聚合成一个"大团",图节点少、结构粗糙;n_cubes=20:网格变密,细节簇被单独识别出来,图更精细;- 多维投影时,格子总数 =
n_cubes的维数次方(2 维、n_cubes=10时就是 100 个格子),所以高维投影下格子数会指数增长,大量空格子被剔除后图可能变得碎片化。
它还支持按维度分别设置,例如n_cubes=[10, 20, 5],给不同维度的数据分配不同精度(见 kmapper/kmapper.py 的示例)。
perc_overlap:图的"连通性"
perc_overlap是相邻格子沿单一维度的重叠比例(0~1)。源码中的半径公式很直观(kmapper/cover.py):
radius = range / (2 × n_cubes × (1 - perc_overlap))- 重叠小(如 0.1):格子几乎不重叠,相邻节点很难共享成员,图容易出现孤立岛屿和断开的分支;
- 重叠大(如 0.7):相邻格子共享大量样本,边多而密,原本零散的簇被"缝合"成一张连通的网络;
- 极端值
perc_overlap=1.0时半径无限大,所有格子完全重叠,图会退化成稠密团状。
它同样支持按维度列表设置,如perc_overlap=[0.1, 0.2, 0.5]。
两参数如何共同决定图的精细度?
一句话总结:n_cubes管"切多细",perc_overlap管"连得多紧"。两者组合出四种典型效果:
| 组合 | 图的表现 | 适用场景 |
|---|---|---|
| 低 n_cubes + 低 overlap | 节点少、碎片化 | 快速把握粗略结构 ⚡ |
| 低 n_cubes + 高 overlap | 节点少但连通 | 数据稀疏、想保连通性 |
| 高 n_cubes + 低 overlap | 细节多但可能断裂 | 精细探索、噪声较少 |
| 高 n_cubes + 高 overlap | 细腻且连通,节点偏多 | 默认精细分析 |
下面两张 make_circles 示例(脚本见 examples/makecircles/make_circles_distmean.py)展示了同一圆环数据在不同参数下的差异:
高重叠比例(Overlap 70%)下,圆环被"缝合"成一条首尾相连的彩色链路,参数面板清晰列出 Cubes per dimension 与 Overlap percentage 两项关键配置。
低重叠比例(Overlap 10%)下,节点间连接明显变少,圆环出现缺口——这正是 perc_overlap 过小的典型信号。
而想要还原出完整的马形结构(见 examples/horse/plot_horse.py),就需要把两者同时调高,让精细的局部簇之间保留足够重叠:
合理的 n_cubes 与 perc_overlap 组合下,马的轮廓、四肢与头部都被清晰还原,节点颜色随镜头函数渐变。
新手参数调优速查表
- 起点:
Cover(n_cubes=10, perc_overlap=0.1)是map()的内置默认(见 kmapper/kmapper.py); - 图太碎?优先把
perc_overlap提到 0.3~0.5,而不是直接加格子; - 细节不够?逐步提高
n_cubes(10 → 15 → 20),观察节点数是否爆炸; - 调试可加
verbose=1打印格子中心与半径,单测用例 test/test_coverer.py 覆盖了边界情况,可对照学习。
小结:Cover 类用"切格子 + 算重叠"两件小事,掌控着 KeplerMapper 输出的精细度与连通性。记住这张速查表,调参不再是碰运气 🔍。
【免费下载链接】kepler-mapperKepler Mapper: A flexible Python implementation of the Mapper algorithm.项目地址: https://gitcode.com/gh_mirrors/ke/kepler-mapper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
