[ PROMPT_NODE_26622 ]
scembed
[ SKILL_DOCUMENTATION ]
# scEmbed: 单细胞嵌入生成
## 概述
scEmbed 在单细胞 ATAC-seq 数据集上训练 Region2Vec 模型,以生成用于聚类和分析的细胞嵌入。它提供了一种无监督机器学习框架,用于在低维空间中表示和分析 scATAC-seq 数据。
## 何时使用
在处理以下内容时使用 scEmbed:
- 需要聚类的单细胞 ATAC-seq (scATAC-seq) 数据
- 细胞类型注释任务
- 单细胞染色质可及性的降维
- 与 scanpy 工作流集成以进行下游分析
## 工作流
### 第 1 步:数据准备
输入数据必须为 AnnData 格式,且 `.var` 属性包含峰的 `chr`、`start` 和 `end` 值。
**从原始数据开始** (barcodes.txt, peaks.bed, matrix.mtx):
python
import scanpy as sc
import pandas as pd
import scipy.io
import anndata
# 加载数据
barcodes = pd.read_csv('barcodes.txt', header=None, names=['barcode'])
peaks = pd.read_csv('peaks.bed', sep='t', header=None,
names=['chr', 'start', 'end'])
matrix = scipy.io.mmread('matrix.mtx').tocsr()
# 创建 AnnData
adata = anndata.AnnData(X=matrix.T, obs=barcodes, var=peaks)
adata.write('scatac_data.h5ad')
### 第 2 步:预分词
使用 gtars 工具将基因组区域转换为 token。这将创建一个包含分词后细胞的 parquet 文件,以实现更快的训练:
python
from geniml.io import tokenize_cells
tokenize_cells(
adata='scatac_data.h5ad',
universe_file='universe.bed',
output='tokenized_cells.parquet'
)
**预分词的好处:**
- 更快的训练迭代
- 降低内存需求
- 可重用的分词数据,适用于多次训练运行
### 第 3 步:模型训练
使用分词后的数据训练 scEmbed 模型:
python
from geniml.scembed import ScEmbed
from geniml.region2vec import Region2VecDataset
# 加载分词后的数据集
dataset = Region2VecDataset('tokenized_cells.parquet')
# 初始化并训练模型
model = ScEmbed(
embedding_dim=100,
window_size=5,
negative_samples=5
)
model.train(
dataset=dataset,
epochs=100,
batch_size=256,
learning_rate=0.025
)
# 保存模型
model.save('scembed_model/')
### 第 4 步:生成细胞嵌入
使用训练好的模型生成细胞嵌入:
python
from geniml.scembed import ScEmbed
# 加载训练好的模型
model = ScEmbed.from_pretrained('scembed_model/')
# 为 AnnData 对象生成嵌入
embeddings = model.enc