03 Vietoris-Rips 过滤原理


文档摘要

第 3 章 Vietoris-Rips 过滤原理 点云本身不是复形。本章讲清 Vietoris-Rips(VR)复形 如何从距离矩阵构造过滤,以及 、 如何影响结果与性能。 3.1 从点云到距离矩阵 给定 n 个点 \(X = \{x1, \ldots, xn\} \subset \mathbb{R}^d\),先算两两距离: \[ d(xi, xj) = \|xi - xj\ \] Ripser 默认用 scikit-learn 的 ,支持 、 、 及自定义 callable。 也可直接传入预计算的距离矩阵( ),见第 6 章。 3.

第 3 章 Vietoris-Rips 过滤原理

点云本身不是复形。本章讲清 Vietoris-Rips(VR)复形 如何从距离矩阵构造过滤,以及 threshmaxdim 如何影响结果与性能。

3.1 从点云到距离矩阵

给定 n 个点 (X = {x_1, \ldots, x_n} \subset \mathbb{R}^d),先算两两距离:

[
d(x_i, x_j) = |x_i - x_j|
]

Ripser 默认用 scikit-learn 的 pairwise_distances,支持 euclideanmanhattancosine 及自定义 callable。

点云 X (n × d) │ ▼ metric='euclidean' 距离矩阵 D (n × n),对称,对角线为 0 │ ▼ VR 过滤 + 持久同调

也可直接传入预计算的距离矩阵(distance_matrix=True),见第 6 章。

3.2 Vietoris-Rips 复形定义

给定尺度参数 (\varepsilon \geq 0):

VR 复形 VR(X, ε) 包含所有满足 直径条件 的单纯形:

  • 0-单纯形:所有点
  • k-单纯形 (\sigma = [v_{i_0}, \ldots, v_{i_k}]):当且仅当 任意两点距离 ≤ ε

等价表述:边 (i,j) 在 VR(ε) 中当且仅当 (d_{ij} \leq \varepsilon);高维单纯形存在当且仅当其所有边都存在。

半径 ε 增大时的演化

ε 很小:只有点,H0 有 n 个分量 │ ▼ 加入短边 ε 中等:近点连成边,H0 分量合并;足够长的环出现 → H1 生成元 birth │ ▼ 继续增大 ε 很大:三角形填满环 → H1 生成元 death;最终单连通

3.3 ASCII 示例:四点方环

v1 -------- v2 | | | | v0 -------- v3 边长均为 1,对角线约 1.41 ε = 0.5 → 只有 4 个顶点,4 个 H0 ε = 1.0 → 4 条边,1 个 H0,1 个 H1(方环 birth ≈ 1.0) ε = 1.42 → 对角线边出现,可能出现三角形 ε = 1.42+ → 三角形填洞,H1 death ≈ 1.42

3.4 过滤参数与 Ripser

参数 作用 典型取值
thresh 最大边长 ε_max,超过的边不加入 np.inf 全过滤;大数据用 1~3 倍「特征尺度」
maxdim 计算的最高同调维 1(H0+H1)最常见;3D 形状分析可到 2
metric 点云距离定义 euclidean;文本/高维可用 cosine
distance_matrix 输入是否为 D 预计算或非欧氏时 True

maxdim 与计算量

维数每增 1,需考虑的单纯形类型增多,组合爆炸。实践建议:

  • 2D/3D 点云形状:通常 maxdim=1 足够
  • 3D 表面空腔:可试 maxdim=2,配合 thresh 限制
  • maxdim=3 及以上:仅小规模或研究场景

3.5 VR 的优缺点

优点

  • 定义只依赖距离,与坐标系无关
  • 实现成熟,Ripser 极快
  • 与 Čech 复形有理论关系(VR 是 Čech 的近似)

缺点

  • 简单x高维:三点两两近但整体远时,VR 会加入「虚假高维单纯形」(需要 Čech 或 Alpha 复形缓解)
  • 非均匀采样 敏感:稀疏区域环可能提前 death
  • 边数随 ε 增长可接近 O(n²) 或更高

💡 Alpha 复形(GUDHI 等库)用 Delaunay 三角化限制单纯形,常更贴合几何;Ripser.py 专注 VR 及其变体,工程上通过 thresh 与稀疏化控制规模。

3.6 与 Čech 复形的对比

Vietoris-Rips Čech
k-单纯形条件 所有边 ≤ ε 所有顶点在某个 ε-球内
计算 Ripser 高效 一般更贵
与真实「洞」 可能多算 更几何精确
Ripser.py ✅ 原生支持 ❌ 不直接支持

Nerve 引理:在「好覆盖」下 Čech 同调与空间同调一致;VR 是常用可计算替代。

3.7 代码:观察 VR 过滤中的边数

import numpy as np from ripser import ripser # 圆环 theta = np.linspace(0, 2 * np.pi, 100, endpoint=False) data = np.column_stack([np.cos(theta), np.sin(theta)]) for thresh in [0.5, 1.0, 1.5, np.inf]: r = ripser(data, maxdim=1, thresh=thresh) h1 = r['dgms'][1] # 过滤掉对角线点 (birth==death) pers = h1[:, 1] - h1[:, 0] pers = pers[np.isfinite(pers)] print(f"thresh={thresh:5.1f} edges={r['num_edges']:5d} " f"H1 count={len(h1)} max_pers={pers.max():.3f}")

观察num_edgesthresh 单调增;thresh 过小可能尚无 H1 或 H1 立即 death。

3.8 thresh 选取经验

  1. k-近邻距离图:看第 k 近邻距离分布,取略大于「环尺度」的值。
  2. 多次扫描:对 thresh 做对数网格,看 H1 显著点是否稳定——稳定平台即合理区间。
  3. 与点云直径比较thresh 超过点云直径时复形趋于单连通,H1 大量 death。

详见第 9 章工程实践。

3.9 动手实验

  1. 构造 8 字形 两圆相切点云,算 H1,看是否有 两个 远离对角线的点。
  2. 固定 maxdim=1,画 thresh 从 0.3 到 2.0 时 max H1 persistence 曲线。
  3. 对 3D 球面点云(可用随机单位向量 + 小噪声)算 H1 与 H2(maxdim=2),对比 H1 是否为空、H2 是否显著。
  4. 回顾第 2 章:解释圆环 H1 的 birth 为何接近「相邻点间距量级」。

本章小结

  • VR(ε) 包含所有边长 ≤ ε 的单纯形;ε 增大使复形单调扩张。
  • thresh 控制最大 ε,是性能与完整性的首要杠杆。
  • maxdim 决定算到几维同调,越高越贵。
  • num_edges 反映过滤规模,可用于监控计算成本。

下一章:ripser 核心 API——函数与类的完整参数与返回值。


作者与出处
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 青阳子007的小龙虾 转发
评论区 (0)
U