4、机器学习在蛋白‑配体预测中的角色:回归与分类

说实话,不少刚入门的朋友会问我:“做蛋白‑配体预测到底该用回归还是分类?”我的回答通常是:先看你的实验数据是什么样,再想业务上要什么。这事没那么玄乎,但踩坑的人真不少。

今天我就把这两类任务掰开揉碎讲清楚。回归负责“猜多亲”,分类负责“判死活”。两者用的模型框架类似,但目标函数、评估方式、数据要求完全不一样。下面我们逐项展开。

4.1 回归任务:预测结合亲和力

回归要输出一个连续数值——比如 pIC50、pKd、ΔG。我见过最直接的场景:你手里有几十个化合物,各有活性数据,老板想知道下一个候选物的亲和力是多少。

4.1.1 常用指标

指标含义我的说明
RMSE均方根误差单位与目标一致,直观但受异常值影响大
R²决定系数模型解释了多少方差;我习惯先看这个
Pearson r皮尔逊相关系数只看线性相关,不罚偏差
Spearman ρ排序相关性只关心排名,适合筛选场景
个人习惯:如果项目目标是“找出前10%的强效分子”,我优先看Spearman ρ。如果要做绝对数值预测,RMSE才是硬指标。

4.1.2 数据与模型

回归任务需要高质量的连续活性值。常见陷阱:实验数据来自不同实验室、不同方法,数值漂移严重。我在一个跨膜蛋白项目里就吃过这个亏——同一个化合物的pIC50差了两个数量级,模型怎么调都不收敛。

模型层面,随机森林、XGBoost、图神经网络都有人用。我个人经验:当数据量小于1000时,树模型比深度网络更稳;数据量上万后,图网络+注意力机制往往能多出几个百分点的R²。

# 一个极简的回归示例(Python + scikit-learn)
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score

model = RandomForestRegressor(n_estimators=200, max_depth=12)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

print(f"RMSE: {mean_squared_error(y_test, y_pred, squared=False):.2f}")
print(f"R²  : {r2_score(y_test, y_pred):.3f}")

4.2 分类任务:判断活性 vs 非活性

分类输出是离散标签——最常见的就是“活性(1)”和“非活性(0)”。你想想看,工业界高通量筛选最喜欢这个:一套流程跑下来,直接标好坏,省得测绝对亲和力。

4.2.1 正负样本不平衡

真实筛选场景中活性分子常常只占1%~5%。我遇到过最夸张的一次:15000个化合物,只有73个活性。用原始数据训练出来的模型,永远预测“非活性”,准确率95%以上——但屁用没有。

我曾经犯过的错:以为用默认阈值就好。实际上分类器输出的概率分布严重偏斜,必须重新校准阈值或使用代价敏感学习。

4.2.2 评价指标不能只看准确率

指标适用场景我的看法
AUC‑ROC排序能力最常用,但正负样本极度不平衡时可参考
Precision / Recall实际正类预测效果我习惯看F1,尤其是活性类
PR 曲线下面积不平衡数据强烈推荐,比ROC更真实
命中率 / 富集因子虚拟筛选业务导向,老板最喜欢这个

4.2.3 常用模型与技巧

分类模型可以从逻辑回归一路堆到图注意力网络。我的建议:先跑一个简单的XGBoost基线,看数据是不是 linearly separable。如果基线AUC > 0.85,别急着上大模型;如果 < 0.7,再考虑图网络、3D卷积等复杂架构。

# 分类示例(XGBoost + 不平衡调整)
import xgboost as xgb

model = xgb.XGBClassifier(
    scale_pos_weight=len(y_train[y_train==0]) / len(y_train[y_train==1]),
    n_estimators=100, max_depth=6
)
model.fit(X_train, y_train)
y_prob = model.predict_proba(X_test)[:, 1]
# 根据验证集重新选阈值,比如用最大化F1

4.3 回归 vs 分类:一句话对比

维度回归分类
输出连续值(pIC50等)离散标签(活性/非活性)
数据需求高质量连续活性阈值定义明确,不平衡常存
典型模型RF, XGBoost, GNNXGBoost, DNN, GNN
主要评估RMSE, R², SpearmanAUC, F1, PR‑AUC
业务价值定量排序 & 优化高通量初筛 & 二分化决策
核心原则:如果你的实验能给出连续活性值,用回归;如果只有“活性/非活性”标签,别硬回归。反之亦然。我见过有人在分类数据上做线性回归,结果乱成一团。

4.4 如何选择?一张流程图

下面这张图概括了我平时做任务选型的思路,从数据特点一路走到评估决策。

回归与分类任务选型流程 蛋白‑配体数据 活性值连续? 回归模型 分类模型 RMSE / R² / Spearman AUC / F1 / PR‑AUC 定量排序 / 优化 高通量初筛 / 二分化 提示:数据量 <1000 时优先树模型;不平衡分类必用代价敏感或重采样
小结一下:回归和分类不是非此即彼。有些项目会先用分类筛掉80%无效物,再对剩下的做回归精排。我自己在工业界项目中就这么干——先把非活性丢掉,再花力气算亲和力,效率翻倍。
避坑指南:别在分类任务里用回归的评估指标,也别把回归输出硬切出分类标签(除非你清楚阈值怎么定)。我曾经直接拿回归结果卡了一个pIC50>6就算活性,结果模型在阈值附近摇摆不定,AUC反而比专门训练的分类器低一大截。

说白了,选回归还是分类,核心就看两样:你的数据长什么样,业务上要一个数还是一个标签。搞明白了这个,后面调参、选模型才不会跑偏。