数据简化拓扑抽象降维

pystad的Python项目详细描述


皮斯塔德

pipeline statuscoverage reportBinder

这是STAD的python实现,用于探索和可视化高维数据。此实现基于R version。在

背景

STAD是一种降维算法,它通过给每个数据点一个保持原始高维空间距离的位置来生成高维数据的抽象表示。STAD图建立在最小生成树(MST)上,在该树上添加新的边,直到图与原始数据集之间的相关性最大化。此外,STAD支持包含过滤函数来从新的角度分析数据,强调数据中那些本来会隐藏的特征。在

拓扑数据分析

拓扑数据分析(TDA)旨在描述数据中存在的几何结构。数据集被解释为一个点云,其中每个点都是从底层几何对象中采样的。TDA试图用不变的特征来恢复和描述对象的几何结构。两个几何体可以相互变形而不撕裂或粘合,它们是同胚(例如甜甜圈和咖啡杯)。通常,TDA描述了几何体中的holes,形式化为Betti numbers。在

与其他TDA算法一样,STAD构造了一个描述数据结构的图。然而,STAD的输出应该被解释为数据可视化的结果,而不是数据结构的拓扑描述。其他TDA算法,如mapper,确实会产生拓扑结果。然而,它们依赖于聚集数据,而STAD将原始数据点编码为图中的顶点。在

降维

与t-SNE和UMAP等降维算法相比,STAD产生了更灵活的数据描述。图形可以用不同的布局绘制,用户可以与之交互。此外,STAD的预测保留了数据的全局结构。一般来说,STAD图往往低估网络结构中的远程数据点。另一方面,t-SNE和UMAP更强调数据点与其最近邻居的关系,而不是与远程数据点的关系。在

Alcaide & Aerts (2020)

安装

pySTAD可以安装在:

pip install pystad

将安装以下依赖项:

  • numpy公司
  • 神经质的
  • Python图
  • 熊猫

示例笔记本具有其他依赖项:

  • matplotlib库
  • 网络X
  • scikit学习
  • 朱庇特实验室
  • ipywidgets公司

这些可以与pip或conda一起安装。在jupyter实验室中启用ipyWidget还需要两个步骤:

  • 首先,使用conda安装nodejs:
^{pr2}$
  • 然后安装jupyter实验室扩展:
jupyter labextension install @jupyter-widgets/jupyterlab-manager

示例

有关STAD和交互式探索仪表板的演示,请参阅示例笔记本。下面的代码提供了快速入门:

importstadimportpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltfromscipy.sparseimporttriufromsklearn.metrics.pairwiseimporteuclidean_distances# Circles datasetdata=pd.read_csv('./examples/data/horse.csv',header=0)data=vertex_data.sample(n=500)dist=triu(euclidean_distances(data),k=1)plt.scatter(data.z,data.y,s=5,c=data.x)plt.show()## STAD without lensnetwork_no_lens,detail=stad.stad(dist)stad.draw_network_matplotlib(network_no_lens,detail))plt.show()stad.draw_correlations_matplotlib(detail)plt.show()## STAD with lensnetwork_lens,detail=stad.stad(dist,lens_values=data['x'],lens_bins=3)stad.draw_network_matplotlib(network_lens,detail)plt.show()stad.draw_correlations_matplotlib(detail)plt.show()

与R实施相比

R implementation支持二维滤波器(透镜),并使用模拟退火优化输出图。这个实现目前只支持1D镜头。此外,除了模拟退火,这个实现还支持线性和逻辑扫描。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android首选项相同getPreference()值的不同数据   字符串如何在Java中连接两个列表中的单词   安卓 Java Socket编程:检测客户端和服务器是否连接   使用JTextField的java无法将值转换为int   在java中,如何在不通过超级构造函数设置的情况下将消息设置为自定义异常类   用于标识属性值的java正则表达式模式   Android中的java不可见谷歌地图   java正确取消启动ExecutorService的JavaFX任务   在非活动java类中使用安卓的融合位置提供程序,并在主活动类中获取经度和纬度   spring为什么我的大摇大摆不能用springboot在java中工作?   java JSF(2.2)ViewScope在Weblogic 12.2.1.2和JDK 8上使用Spring 4.3.7(在Mac OS和Docker Oracle Linux环境上)   java如何用一个按钮提高计时器速度   java如何检查字符是否是元音?   注册表引用了不存在的Java运行时环境安装或运行时已损坏错误   来自ResultSet java的mysql getDateTime   maven LanguageTool Java API是否具有“无用”依赖关系?   twitter api身份验证的java Trycatch问题   java在Apache Struts 1.1中是否可以显式白名单?   安卓致命异常:主java。lang.RuntimeException:被问及未知片段