如何从UMAP、t-SNE算法中计算得到连通性邻接矩阵
如何从UMAP和t-SNE中获取连通性邻接矩阵
UMAP获取连通性邻接矩阵
UMAP在拟合数据的计算过程中会生成高维空间的模糊近邻图,可直接通过模型的graph_属性提取,输出格式和scipy输出的kneighbors_graph完全一致。
代码示例:
import umap import pandas as pd import numpy as np ids = df.index # 初始化UMAP模型,近邻数、距离度量参数可和之前KNN计算逻辑保持一致 umap_embedder = umap.UMAP(n_neighbors=n_neighbors, metric=metric) # 拟合输入数据 umap_embedder.fit(df.values) # 获取连通性邻接矩阵 umap_graph = umap_embedder.graph_ # 如需和KNN输出一致的严格0/1二值矩阵,将所有非0值设为1 umap_graph.data = np.ones_like(umap_graph.data) # 转成DataFrame格式 umap_knn_df = pd.DataFrame(umap_graph.toarray(), columns=ids, index=ids)
*如果需要基于UMAP降维后低维空间的邻接矩阵,可对UMAP输出的低维嵌入结果调用scipy的kneighbors_graph计算即可,逻辑和原始高维空间计算KNN邻接矩阵一致。
t-SNE获取连通性邻接矩阵
t-SNE本身没有内置的邻接矩阵输出接口,可根据需求选择两种实现方式:
- 若需要基于t-SNE降维后低维空间的连通性邻接矩阵,直接对t-SNE输出的低维嵌入结果调用
kneighbors_graph计算即可,代码示例:
from sklearn.manifold import TSNE from sklearn.neighbors import kneighbors_graph import pandas as pd ids = df.index # 拟合t-SNE得到低维嵌入结果 tsne_embed = TSNE(n_components=2, metric=metric).fit_transform(df.values) # 基于低维嵌入计算KNN连通性邻接矩阵 tsne_knn = kneighbors_graph(tsne_embed, n_neighbors=n_neighbors, metric=metric, mode='connectivity').toarray() tsne_knn_df = pd.DataFrame(tsne_knn, columns=ids, index=ids)
- 若需要t-SNE计算过程中用到的高维空间相似性对应的邻接矩阵,可手动计算高维空间的近邻关系,二值化后得到连通性矩阵即可。
内容的提问来源于stack exchange,提问作者Astra Uvarova - Saturn's star
相关产品推荐
相关产品推荐

