特征工程总览:输入特征与输出目标
在做AlphaFold特征调优之前,我们得先搞清楚一个问题:模型到底在看什么数据?
说白了,特征工程就是把乱七八糟的生物数据,转化成模型能理解的语言。你给它什么,它就学什么。你给它垃圾,它只能给你垃圾。
我个人习惯把特征工程比作「翻译官」:把氨基酸序列、进化信息、模板结构这些生物信息,翻译成机器能用的张量。
AlphaFold的输入特征
我刚开始接触AlphaFold时,面对那么多输入文件也是一脸懵。后来慢慢理清楚了,其实核心就三大类:
1. 序列特征:MSA(多序列比对)
MSA是AlphaFold的命根子。没有好的MSA,预测质量直接崩盘。
MSA里到底装了什么?
- 目标序列
- 同源序列(来自不同物种的亲戚)
- 每个位置的进化保守性
- 共进化信息(比如两个位置要一起变)
嗯,这块我踩过不少坑。一开始以为MSA越多越好,结果堆了10万条序列进去,训练反而变差了。后来才明白,质量比数量重要得多。
2. 结构特征:模板结构
模板其实就是已知的三维结构。AlphaFold会拿它们当「参考书」看。
模板特征包括:
- 模板的原子坐标(.pdb文件里的xyz数据)
- 模板和目标序列的比对信息
- 模板的残基间距离
我在项目中遇到过一种情况:明明有很好的模板,预测结果却很差。查了半天发现,模板比对错了。这事特别容易发生在序列相似度低的时候。
3. 其他特征:别忘了这些细节
除了MSA和模板,还有些「小角色」也管用:
| 特征名称 | 描述 | 调优价值 |
|---|---|---|
| 残基索引 | 每个氨基酸在序列中的位置编号 | 低(一般不碰) |
| 链标识 | 区分多聚体中的不同亚基 | 中等(多聚体必调) |
| 额外特征 | 实验条件、物种信息等 | 低(多数项目不需要) |
我的建议:多数情况下,集中精力调MSA就够了。模板处理也有讲究,但属于进阶操作。
输出目标:AlphaFold到底在预测什么?
很多人以为AlphaFold直接输出pdb文件。错。
它输出的其实是一堆「概率图」。
1. 距离预测
这是核心。模型会预测每对残基之间的距离分布。
比如:残基i和残基j,它们之间最可能距离是8Å还是15Å?
距离图的格式什么样?
# 假设我们有个2残基序列
# 输出是一个N*N的矩阵
# 每个位置是一个64维的概率分布向量
distogram = {
"shape": [N, N, 64],
"bins": [2.0, 2.5, 3.0, ..., 20.0], # 64个距离区间
"probabilities": [[0.01, 0.02, ..., 0.001], ...] # 每个区间的概率
}
2. 角度预测
蛋白质不是直的,它会弯。模型会预测每个残基的主链二面角(φ和ψ)。
我刚开始学的时候,老搞不清楚二面角是什么意思。
简单说:它决定了蛋白质骨架的走向。
3. 主链扭转角
这个比二面角更细粒度。模型预测每个残基的主链扭转角θ和角旋转τ。
你想想看,如果连骨架的扭动方向都能猜对,那整体结构肯定不会差太多。
输入和输出的关系图
搞清楚了双方,我们就能画出这张核心流程图了:
我曾经犯过的错:只顾着调MSA,忽略了模板质量。结果有一半的预测实际上是「对着错误模板瞎猜」的。现在我做项目,一定会先检查模板比对的可信度。
特征工程的具体操作
搞清楚了输入和输出,下一步就是怎么调了。我把它分成三个层次:
初级:直接调参数
最容易上手。比如:
# AlphaFold配置中的特征相关参数示例
"max_template_date": "2020-05-14", # 只取这个日期前的模板
"num_recycle": 3, # 循环迭代次数
"model_preset": "monomer", # 单聚体/多聚体模式
中级:剪裁MSA
你想想看,MSA里有几万条序列,但真正有用的可能只有几百条。怎么剪?
- 按序列相似度过滤(太相似的去掉)
- 按覆盖度过滤(覆盖太差的去掉)
- 按进化距离过滤(太远的物种参考意义不大)
高级:自定义特征
到了这个级别,你就开始动代码了。比如:
# 伪代码示例:添加自定义距离约束
custom_features = {
"contact_penalty": 5.0, # 强制某两个残基必须靠近
"distance_bounds": [ # 限制某对残基的距离范围
(10, 20), # 残基A-B必须在10-20Å之间
(30, 40) # 残基C-D必须在30-40Å之间
]
}
个人经验:如果你不是在做某个特定靶点的高精度优化,不建议碰高级特征。默认配置在大多数情况下已经够用了。我曾经花了两周时间加了一堆自定义特征,结果pLDDT(置信度分数)反而降了3个点。
小总结
我习惯把这章讲的内容记成一张「检查清单」:
- 输入:序列、MSA、模板、其他
- 处理:清洗、对齐、剪裁、编码
- 输出:距离图、角度、扭转角
每次调参前,先对着清单过一遍。你会发现很多问题其实出在输入数据上,跟模型结构没关系。