4. 调控元件的计算表示与特征工程
要让模型“读懂”启动子与调控元件,第一步不是选网络结构,而是把DNA序列变成数值张量。同一段序列,用不同编码方式送入模型,可学习到的模式、所需数据量和可解释性差别很大。本节围绕四种主流表示——独热编码、位置权重矩阵(PWM)、k-mer计数/向量、深度学习嵌入——讲清它们的构造方式、适用场景与工程取舍。
一、独热编码:最基础也最常用的序列张量
独热编码把长度为L的序列映射为4×L的矩阵,A、C、G、T各占一行,某一位碱基对应行置1,其余为0。若遇到N(未知碱基),通常置为0.25的均匀分布,避免引入虚假偏好。工程实现上,先建立字符到索引的映射,再一次性构造数组:
import numpy as np
BASE = {'A':0,'C':1,'G':2,'T':3}
def one_hot(seq):
L = len(seq)
X = np.zeros((4, L), dtype=np.float32)
for i, b in enumerate(seq.upper()):
if b in BASE:
X[BASE[b], i] = 1.0
else:
X[:, i] = 0.25 # N 或非法字符
return X
# 示例:TATA框核心片段
print(one_hot("TATAAA").shape) # (4, 6)
独热编码保留了每个位置的碱基身份,适合CNN按位置扫描motif,也便于后续做卷积核可视化。缺点是维度随序列线性增长,且无法直接表达“某位置偏好嘌呤”这类模糊模式。当序列长度超过几千bp时,通常需要截断到启动子核心区(如TSS上游-2000至+500)或先做降采样。
二、位置权重矩阵:把motif变成可打分的概率模型
PWM从一组已知结合位点出发,统计每个位置各碱基的出现频率,加伪计数后转成对数几率(log-odds)矩阵。给定新序列,逐位相加得分,高于阈值即判为潜在结合位点。构造时需注意背景碱基频率(通常取基因组GC含量)和伪计数α(常用0.5~1.0),否则零频率会导致对数发散。
# 假设已有比对好的motif矩阵 counts (4 x W)
pwm = np.log2((counts + 0.5) / (counts.sum(0) + 2.0) / bg[:, None])
# 扫描序列:对每个窗口求得分
scores = [ (pwm * one_hot(seq[i:i+W])).sum() for i in range(len(seq)-W+1) ]
PWM的优势是可解释、可跨样本复用,JASPAR、HOCOMOCO等数据库直接提供矩阵文件。它适合做特征工程中的“先验注入”:把PWM得分作为额外通道拼接到独热张量上,让模型同时看到原始序列和已知motif响应。局限在于它假设各位置独立,无法刻画位置间协同,对长距离调控元件表达力不足。
三、k-mer表示:把局部组合变成可统计的特征
k-mer把序列切成所有长度为k的子串,统计频次或存在性。k=4时共256维,k=6时4096维。常用做法是“计数+TF-IDF+截断”,或直接做二进制存在向量。k-mer能捕捉PWM忽略的碱基组合,但维度随k指数增长,且丢失位置信息。实践中常与位置信息结合,例如按启动子分区(-500~-1、+1~+200)分别统计k-mer,形成分区特征向量。
四、深度学习嵌入:让模型自己学表示
嵌入表示不依赖人工定义,而是通过卷积、池化或Transformer从独热序列中学习连续向量。典型做法是:先用一维卷积在独热张量上滑动,每个卷积核相当于一个可学习的PWM;再经全局池化得到固定长度嵌入,送入全连接层做预测。Transformer则用自注意力捕捉远距离依赖,适合增强子-启动子交互建模。
嵌入的工程要点包括:卷积核宽度对应motif长度(常用8~16),通道数64~256;池化方式可选最大池化(保留最强motif信号)或平均池化(保留整体密度);若数据量小,可先用预训练DNA语言模型(如DNABERT)提取嵌入,再微调下游任务。嵌入的代价是可解释性下降,但可通过注意力权重或卷积核可视化反推重要motif。
五、如何选择与组合
四种表示并非互斥。实际项目中常见的组合策略是:以独热编码为主输入,拼接PWM扫描得分作为先验通道,再在模型末端接入k-mer统计特征或预训练嵌入。若样本量少(<1000),优先用PWM+k-mer这类低参数特征,配合线性模型或浅层网络;若样本量充足(>10万),端到端卷积或Transformer嵌入通常表现更好。
| 表示方式 | 维度 | 位置信息 | 可解释性 | 适用场景 |
|---|---|---|---|---|
| 独热编码 | 4×L | 完整保留 | 高 | CNN/Transformer输入 |
| PWM | motif数×窗口 | 窗口内保留 | 很高 | 先验注入、快速扫描 |
| k-mer | 4^k | 丢失 | 中 | 小样本、分区统计 |
| 深度学习嵌入 | 64~1024 | 隐式学习 | 低~中 | 大数据端到端建模 |
特征工程的核心不是追求最复杂的表示,而是让输入张量中的每一个维度都能对应到可解释的生物学信号。建议在项目初期同时构造独热、PWM和k-mer三套特征,用交叉验证比较单路与拼接效果,再决定是否引入嵌入。这样既能保证基线可解释,也为后续深度模型留出提升空间。