KeplerMapper如何选Lens:7种投影函数实战,精准捕获数据的拓扑形态

📅 2026/8/23 12:13:27
KeplerMapper如何选Lens:7种投影函数实战,精准捕获数据的拓扑形态
KeplerMapper如何选Lens7种投影函数实战精准捕获数据的拓扑形态【免费下载链接】kepler-mapperKepler Mapper: A flexible Python implementation of the Mapper algorithm.项目地址: https://gitcode.com/gh_mirrors/ke/kepler-mapperKeplerMapper 是一款用 Python 实现的 Mapper 算法拓扑数据分析工具而Lens透镜的选择直接决定了你能从数据中看到什么样的结构。选对 Lens簇、环、分支就会自然浮现选错 Lens再漂亮的图也只是噪声的排列。本文带你逐一拆解 KeplerMapper 内置的 7 种投影函数sum、mean、median、max/min、std、l2norm、dist_mean并通过 make_circles、乳腺癌、手写数字等真实案例教你根据数据形态快速选定最合适的 Lens。为什么 Lens 是 Mapper 的核心Mapper 的工作流程可以概括为四步投影Lens→ 覆盖Cover→ 聚类Cluster→ 建图Nerve。其中投影函数负责把高维数据压扁到 1 维或 2 维后续所有结构都建立在这个低维表示之上。官方理论文档 docs/theory.rst 中这样解释Mapper 通过投影函数引导局部聚类从而揭示数据的线性、非线性、簇、环等基本形状。可以说Lens 是你对数据提的问题图是数据给出的回答。所有投影函数都在project()方法中实现核心代码位于 kmapper/kmapper.py。7种内置投影函数速查表KeplerMapper 支持用字符串直接指定投影函数以下是内置 7 种外加 1 个进阶函数的速查表投影函数计算方式适合场景sum每行求和默认选择整体规模mean每行求均值消除量纲影响的平均水平median每行中位数对异常值稳健的中心趋势max/min每行最大/最小值捕捉极端特征std每行标准差度量样本内部波动l2norm每行 L2 范数样本到原点的距离dist_mean样本到数据均值的距离发现离群结构knn_distance_n到 n 个最近邻的距离和密度感知的离群检测sum 与 mean捕捉整体规模的默认之选sum是 KeplerMapper 的默认投影函数对每条数据的所有特征求和得到一个标量。它回答的问题是这个样本整体有多大经典的狮子Lion参考数据案例就是直接使用默认sum投影完成映射的案例脚本见 examples/lion/lion.py效果如下mean与sum类似但排除了特征数多寡的影响更适合特征数量不一致或量纲差异大的场景。median 与 max/min对异常值稳健或敏感median取中位数异常值难以拉偏结果适合含噪声、脏数据的真实业务数据。max和min则反其道而行——它们对极端值极度敏感。当某一项特征特别突出本身就是信号时例如交易数据中单笔大额订单、传感器数据中的峰值用max投影往往能单独把这类样本剥离出来。std用波动性揭示样本的复杂度std计算每行特征值的标准差把 Lens 变成一把波动尺特征取值越分散的样本投影值越大。它特别适合识别内部结构复杂的样本例如基因表达谱中分化程度高的细胞、时间序列中变异性大的交易日。std 投影经常能把高波动群体聚成独立的大节点非常便于进一步核查。l2norm样本到原点的距离l2norm计算每行向量的欧几里得范数即样本到原点的距离。在乳腺癌数据集案例中作者正是选择 L2 范数作为第二条 Lens 维度之一因为它能把特征总量大的样本推开起到数据分散的作用避免大量点挤在一起。完整实现可参考 examples/plot_breast_cancer.py# 创建 L2 范数 Lens lens2 mapper.fit_transform(X, projectionl2norm)该案例将 Isolation Forest 异常分与 l2norm 拼成 2 维 Lens映射结果清晰地呈现了良/恶性样本的拓扑分布dist_mean发现偏离群体中心的样本dist_mean计算每个样本到整个数据集均值向量的距离本质是一把离群尺。距离越远样本越偏离群体中心。在噪声圆圈数据集make_circles上用dist_mean做投影是观察环状结构的经典操作——内外两圈的半径差异会被 Lens 忠实记录映射图因此呈现出漂亮的环形拓扑。案例代码见 examples/makecircles/make_circles_distmean.py进阶Lens维度索引、knn_distance_n 与降维模型除了字符串函数KeplerMapper 的projection参数还支持三种进阶玩法维度索引列表直接取原始坐标做 Lens如projection[0, 1]取前两维。对于 make_circles 这类 2D 数据取 X 轴即可还原内外圈结构效果对比可参考 examples/makecircles/make_circles_xaxis.py 的输出knn_distance_n写成knn_distance_5表示计算到 5 个最近邻的距离和。它在局部密度意义上衡量离群比 dist_mean 更抗整体漂移。scikit-learn 估计器直接把PCA()、TSNE()、UMAP()实例传进去即可获得多降维 Lens。手写数字案例就用 t-SNE 把 64 维像素压到 2 维再建图节点悬浮窗还能直接看到数字原图见 examples/plot_digits.py如何选择Lens实战四步法结合 docs/theory.rst 的思想与官方案例的选择逻辑推荐四步法先问业务Lens 应该回答什么问题整体规模→sum/mean离群程度→l2norm/dist_mean/knn_distance_n内部波动→std。让数据分散而不是聚堆官方乳腺癌案例明确建议第二 Lens 选择有分散性的函数如l2norm避免大量点堆在同一区间。小数据先试 1 维用默认km.Cover(n_cubes10, perc_overlap0.1)快速跑一版看节点数量与图形连通性是否合理再调整。多维度组合把两条语义不同的 Lens 用np.c_[]拼成 2 维 Lens信息量往往大于单维例如异常分 L2 范数。总结KeplerMapper 选 Lens 的核心心法可以浓缩为一句话Lens 即问题。看整体 →sum/mean抗噪声 →median抓极端 →max/min量波动 →std测距离 →l2norm/dist_mean/knn_distance_n要降维 → PCA / t-SNE / UMAP投影函数的实现细节都在 kmapper/kmapper.py 的project()方法中配合 kmapper/cover.py 的覆盖参数你几乎可以组合出任意角度去观察数据的拓扑形态。选对 Lens拓扑图自会说话。【免费下载链接】kepler-mapperKepler Mapper: A flexible Python implementation of the Mapper algorithm.项目地址: https://gitcode.com/gh_mirrors/ke/kepler-mapper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考