【TDA】mapper

devtools/2024/10/17 18:55:15/

https://giotto-ai.github.io/gtda-docs/latest/notebooks/tmp/mapper_quickstart.html?highlight=mapper
https://giotto-ai.github.io/gtda-docs/latest/modules/mapper.html?highlight=mapper
https://www.quantmetry.com/blog/topological-data-analysis-with-mapper/
https://research.math.osu.edu/tgda/mapperPBG.pdf 由这篇文章提出

在这里插入图片描述

给定一个点的数据集,Mapper 背后的基本步骤如下:

  1. 使用滤波函数 f 或透镜将其映射到低维空间。常见的滤波函数选择包括通过 PCA 或基于密度的方法投影到一个或多个轴上。
  2. 构建投影空间的覆盖 ( U i ) i ∈ I (U_i)_{i\in I} (Ui)iI,通常采用具有恒定长度的重叠区间集的形式。
  3. 对于每个区间 U i U_i Ui,在原像 f − 1 ( U i ) f^{-1}(U_i) f1(Ui) 中对点进行聚类,形成集合 C i , 1 , … , C i , k i C_{i,1},\ldots,C_{i,k_i} Ci,1,,Ci,ki
  4. 构建一个图,其顶点是聚类集合,如果两个聚类有一些共同的点,则两个顶点之间存在一条边。

在这里插入图片描述
数据由二维黑色点表示(在左侧),这里的滤波函数简单地是一个高度函数(投影到 y 轴上),四个区间组成了投影空间的覆盖;在拉回这些区间后,即取滤波函数的原像(即左边的图的点),我们以最近邻的方式对每个原像进行聚类。生成的 Mapper 图在右侧描绘。

透镜(lens), 覆盖(cover)和聚类算法 都可以灵活的进行选择。

  • 透镜(lens)的选择非常重要,因为输出图将明显依赖于这个选择。根据您正在分析的数据集类型,可以应用最有意义的透镜。例如,对于异常值检测,应用一个lens,将其投影到与 L2 范数或第一个 PCA 组件相结合的isolation forest score是有意义的。

    • 在一维情况下,可以选择一些高度函数(如上图所示)、偏心率或中心性。
    • 在更多维度的情况下,典型的选择是标准的降维算法,如 PCA、Isomap、MDS、t-SNE 或 UMAP。在生物应用中,通常使用基于密度的方法,例如距离第一个 k 近邻的距离。通过投影到变分自编码器产生的某个潜在空间,可以实现更微妙的结果。
  • 覆盖,一个标准选择是一组 d 维区间(即 d 个一维区间的笛卡尔积),这些区间具有相同的长度,并且以指定的百分比成对重叠。这是另一个关键参数,因为重叠将决定 Mapper 图中的边的创建。

  • 聚类技术。DBSCAN或层次聚类。全局选择聚类数量作为超参数可能很棘手:聚类应用于由覆盖元素的拉回产生的每组点,因此可能有不同的聚类数量需要选择。一种解决方案是根据规则停止凝聚聚类,例如,在树状图中发现足够大的间隙的第一个实例。

在这里插入图片描述

# Data wrangling
import numpy as np
import pandas as pd  # Not a requirement of giotto-tda, but is compatible with the gtda.mapper module# Data viz
from gtda.plotting import plot_point_cloud# TDA magic
from gtda.mapper import (CubicalCover,make_mapper_pipeline,Projection,plot_static_mapper_graph,plot_interactive_mapper_graph
)# ML tools
from sklearn import datasets
from sklearn.cluster import DBSCAN
from sklearn.decomposition import PCAdata, _ = datasets.make_circles(n_samples=5000, noise=0.05, factor=0.3, random_state=42)
plot_point_cloud(data)# Define filter function – can be any scikit-learn transformer
filter_func = Projection(columns=[0, 1])
# Define cover
cover = CubicalCover(n_intervals=10, overlap_frac=0.3)
# Choose clustering algorithm – default is DBSCAN
clusterer = DBSCAN()# Configure parallelism of clustering step
n_jobs = 1# Initialise pipeline
pipe = make_mapper_pipeline(filter_func=filter_func,cover=cover,clusterer=clusterer,verbose=False,n_jobs=n_jobs,
)fig = plot_static_mapper_graph(pipe, data)
fig.show(config={'scrollZoom': True})

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/devtools/126534.html

相关文章

python 爬虫 入门 一、基础工具

目录 一,网页开发者工具的使用 二、通过python发送请求 (一)、get (二)、带参数的get (三)、post 后续:数据解析 一,网页开发者工具的使用 我们可以用 requests 库…

2024 年 9 月区块链游戏研报:行业回暖,Telegram 游戏引发热潮

作者:Stella L (stellafootprint.network) 数据来源:Footprint Analytics Games Research Page 9 月份,区块链游戏代币的市场总值增长了 29.2%,达到 232 亿美元,日活跃用户(DAU)数量上升了 1…

AVL树的实现

AVL树 1. AVL的概念2. AVL树的实现2.1 AVL树的结构2.2 AVL树的插⼊2.2.1 AVL树插⼊⼀个值的⼤概过程2.2.2 平衡因⼦更新2.2.3 插⼊结点及更新平衡因⼦的代码实现 2.3 旋转2.3.1 旋转的原则2.3.2 右单旋2.3.3 右单旋代码实现2.3.4 左单旋2.3.5 左单旋代码实现2.3.6 左右双旋2.3.…

力扣【48-旋转图像】【数组-C语言】

题目:力扣-48 给定一个 n n 的二维矩阵 M 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 写代码之前先分析矩阵旋转的本质: 矩阵顺时针旋转…

[数据结构]带头双向循环链表的实现与应用

文章目录 一、引言二、链表的基本概念1、链表是什么2、链表与顺序表的区别3、带头双向循环链表 三、带头双向循环链表的实现1、结构体定义2、初始化3、销毁4、显示5、数据操作 四、分析带头双向循环链表1、存储方式2、优点3、缺点 五、总结1、练习题2、源代码 一、引言 链表作…

【exceljs】纯前端如何实现Excel导出下载和上传解析?

前段时间写过一篇类似的文章,介绍了sheetjs。最近发现了一个更好用的库ExcelJS,它支持高级的样式自定义,并且使用起来也不复杂。实际上sheetjs也支持高级自定义样式,不过需要使用付费版。 下面对比了Exceljs和Sheetjs&#xff1a…

10月15日,每日信息差

第一、《哈利・波特与魔法石》在中国内地总票房突破 3 亿元,包括 2002 年首映的 5600 万,2020 年重映的 1.923 亿,以及 2024 年重映的 5170 万。 第二、全国铁路实施新货物列车运行图,增开城际班列至 131 列,多式联运…

跨站请求伪造(CSRF,Cross-Site Request Forgery)

跨站请求伪造(CSRF,Cross-Site Request Forgery)是一种网络攻击方式,它允许攻击者在用户不知情的情况下,以用户的名义执行非授权的命令。这种攻击利用了用户已经验证的身份和信任关系,来执行恶意操作。 一…