从参考数据集到查询数据集的注释又被称为迁移注释,其实属于自动注释,只不过这里的注释更具有领域特性,因为我们想在指定的参考数据集上训练深度学习模型,然后迁移到查询数据集,这种AI注释方式适合用于自动化注释特定疾病。目前TOSICA是迁移注释的代表方法。
参考:
[1] https://github.com/Starlitnightly/single_cell_tutorial
[2] https://github.com/theislab/single-cell-best-practices
加载参考数据集
参考数据需要与查询数据保持一致的预处理方法。归一化一般受到sc.pp.normalize_total
中target_sum
参数的影响,在scanpy中,默认值是自适应的,这是导致注释出错的一个原因,因此,我们固定设置target_sum
参数为1e4
。
在下面的案例中,我们使用omicverse来预处理原始counts,target_sum
参数设置为50*1e4
。
高质量的参考数据集是必要的,这里介绍了Cell Blast的参考数据集,Cell Blast收集了100多个高质量的单细胞带注释数据集,下面我们使用Zheng数据集来注释前面的骨髓数据集。Zheng作为参考数据集:
import omicverse as ov
import scanpy as sc
ov.ov_plot_set()
ref_adata = ov.utils.read('./data/Zheng.h5ad')
print(ref_adata)
TOSICA要求参考数据集的细胞数量不能少于30,000个,否则模型训练效果不佳。如果参考数据集的规模为100,000,随机选择30,000个细胞作为训练集也足够保持TOSICA的性能。
因此,我们在Zheng中随机选取30,000个细胞,使用random.sample
进行无放回采样:
import random
cell_idx=list(random.sample(ref_adata.obs.index.tolist(),30000))
ref_adata=ref_adata[cell_idx]
print(ref_adata)
注释的细胞类型在cell_ontology_class
中查看:
ref_adata.obs['cell_ontology_class'].cat.categories
检查归一化程度:
ref_adata.X.max() # 173.0
这是一个较大的整数,表明是原始counts,因此,我们对它进行预处理:
ref_adata = ov.pp.preprocess(ref_adata, mode='shiftlog|pearson', n_HVGs=