umap 速度测试

该文对UMAP的运行速度进行了测试,使用不同数量的样本(从10,000到800,000)进行聚类和可视化。随着样本量增加,计算时间和内存需求显著上升,导致在达到800,000样本时因内存限制无法完成。作者提出,对于大型数据集,可以采用抽样方法来减少计算资源的消耗。
摘要由CSDN通过智能技术生成

今天终于把umap的速度给测了一下,结果如下

预处理文件(83万的数据量)

# import scanpy as sc 
# adata=sc.read("/DATA1/zhangjingxiao/yxk/dataset/FullMouseBrain/FullMouseBrain_raw.h5ad")
# print(adata)
# sc.pp.normalize_total(adata,target_sum=10000)
# sc.pp.log1p(adata)
# sc.pp.highly_variable_genes(adata, n_top_genes=2000, subset = True)
# sc.pp.scale(adata)
# sc.tl.pca(adata,svd_solver='arpack')

# #write to PCA h5ad 
# adata.write("/DATA1/zhangjingxiao/yxk/dataset/FullMouseBrain/FullMouseBrain_pca.h5ad")

sample=10000

import scanpy as sc 
#import hnswlib
import scanpy as sc
import pandas as pd
from time import time 
# 怎么关闭warning
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
############################
n_sample=10000
############################

adata=sc.read("/DATA1/zhangjingxiao/yxk/dataset/FullMouseBrain/FullMouseBrain_pca.h5ad")
adata=sc.pp.subsample(adata,n_obs=n_sample,copy=True)
print(adata.obsm["X_pca"].shape)
t0=time()
sc.pp.neighbors(adata)
sc.tl.umap(adata)
t1=time()
print("*"*50)
print("*"*50)
print("umap sample={},fit cost {}s".format(n_sample,t1-t0))
print("*"*50)
print("*"*50)
sc.pl.umap(adata,color = ["BATCH", "celltype"])

在这里插入图片描述

sample=20000

import scanpy as sc 
#import hnswlib
import scanpy as sc
import pandas as pd
from time import time 
# 怎么关闭warning
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
############################
n_sample=20000
############################

adata=sc.read("/DATA1/zhangjingxiao/yxk/dataset/FullMouseBrain/FullMouseBrain_pca.h5ad")
adata=sc.pp.subsample(adata,n_obs=n_sample,copy=True)
print(adata.obsm["X_pca"].shape)
t0=time()
sc.pp.neighbors(adata)
sc.tl.umap(adata)
t1=time()
print("*"*50)
print("*"*50)
print("umap sample={},fit cost {}s".format(n_sample,t1-t0))
print("*"*50)
print("*"*50)
sc.pl.umap(adata,color = ["BATCH", "celltype"])

在这里插入图片描述

sample=50000

import scanpy as sc 
#import hnswlib
import scanpy as sc
import pandas as pd
from time import time 
# 怎么关闭warning
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
############################
n_sample=50000
############################

adata=sc.read("/DATA1/zhangjingxiao/yxk/dataset/FullMouseBrain/FullMouseBrain_pca.h5ad")
adata=sc.pp.subsample(adata,n_obs=n_sample,copy=True)
print(adata.obsm["X_pca"].shape)
t0=time()
sc.pp.neighbors(adata)
sc.tl.umap(adata)
t1=time()
print("*"*50)
print("*"*50)
print("umap sample={},fit cost {}s".format(n_sample,t1-t0))
print("*"*50)
print("*"*50)
sc.pl.umap(adata,color = ["BATCH", "celltype"])

在这里插入图片描述

sample=100000

import scanpy as sc 
#import hnswlib
import scanpy as sc
import pandas as pd
from time import time 
# 怎么关闭warning
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
############################
n_sample=100000
############################

adata=sc.read("/DATA1/zhangjingxiao/yxk/dataset/FullMouseBrain/FullMouseBrain_pca.h5ad")
adata=sc.pp.subsample(adata,n_obs=n_sample,copy=True)
print(adata.obsm["X_pca"].shape)
t0=time()
sc.pp.neighbors(adata)
sc.tl.umap(adata)
t1=time()
print("*"*50)
print("*"*50)
print("umap sample={},fit cost {}s".format(n_sample,t1-t0))
print("*"*50)
print("*"*50)
sc.pl.umap(adata,color = ["BATCH", "celltype"])

在这里插入图片描述

sample=200000

import scanpy as sc 
#import hnswlib
import scanpy as sc
import pandas as pd
from time import time 
# 怎么关闭warning
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
############################
n_sample=200000
############################

adata=sc.read("/DATA1/zhangjingxiao/yxk/dataset/FullMouseBrain/FullMouseBrain_pca.h5ad")
adata=sc.pp.subsample(adata,n_obs=n_sample,copy=True)
print(adata.obsm["X_pca"].shape)
t0=time()
sc.pp.neighbors(adata)
sc.tl.umap(adata)
t1=time()
print("*"*50)
print("*"*50)
print("umap sample={},fit cost {}s".format(n_sample,t1-t0))
print("*"*50)
print("*"*50)
sc.pl.umap(adata,color = ["BATCH", "celltype"])

在这里插入图片描述

sample=400000

import scanpy as sc 
#import hnswlib
import scanpy as sc
import pandas as pd
from time import time 
# 怎么关闭warning
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
############################
n_sample=400000
############################

adata=sc.read("/DATA1/zhangjingxiao/yxk/dataset/FullMouseBrain/FullMouseBrain_pca.h5ad")
adata=sc.pp.subsample(adata,n_obs=n_sample,copy=True)
print(adata.obsm["X_pca"].shape)
t0=time()
sc.pp.neighbors(adata)
sc.tl.umap(adata)
t1=time()
print("*"*50)
print("*"*50)
print("umap sample={},fit cost {}s".format(n_sample,t1-t0))
print("*"*50)
print("*"*50)
sc.pl.umap(adata,color = ["BATCH", "celltype"])

在这里插入图片描述

sample=600000

import scanpy as sc 
#import hnswlib
import scanpy as sc
import pandas as pd
from time import time 
# 怎么关闭warning
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
############################
n_sample=600000
############################

adata=sc.read("/DATA1/zhangjingxiao/yxk/dataset/FullMouseBrain/FullMouseBrain_pca.h5ad")
adata=sc.pp.subsample(adata,n_obs=n_sample,copy=True)
print(adata.obsm["X_pca"].shape)
t0=time()
sc.pp.neighbors(adata)
sc.tl.umap(adata)
t1=time()
print("*"*50)
print("*"*50)
print("umap sample={},fit cost {}s".format(n_sample,t1-t0))
print("*"*50)
print("*"*50)
sc.pl.umap(adata,color = ["BATCH", "celltype"])

在这里插入图片描述

sample=800000

这个发生错误,因为计算sc.pp.neighbors()太耗内存了,内存直接炸掉了,所以出不来结果,不过这个时间应该在一个小时左右

环境如下

在这里插入图片描述
在这里插入图片描述
我觉得我没必要每次看umap都要看全部的数据,例如我可以抽样看下结果,例如我完全可以抽半来看结果,这种情况是可以的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值