活性数据处理与标准化
在生物信息学与药物设计任务中,分子活性数据(如IC50、EC50、Ki等)是建模的核心依据之一。由于这些数据常来源于不同实验条件与测定平台,其数值范围、单位、尺度不尽相同,若不进行标准化处理,将严重影响后续的机器学习模型训练效果与预测可靠性。本章将介绍如何对这些数据进行转换、归一化,并完成建模所需的标签划分。
1 常见活性数据及其单位
在公开数据库(如 ChEMBL、BindingDB、PubChem BioAssay)中,我们常见的活性数据包括:
指标名称 | 含义 | 单位 | 常见范围 |
---|---|---|---|
IC50 | 抑制浓度50%,表示化合物抑制靶标反应50%的浓度 | nM / µM | 1 nM ~ 100 µM |
EC50 | 有效浓度50%,产生50%最大效应的浓度 | nM / µM | 1 nM ~ 100 µM |
Ki | 抑制常数,描述化合物与靶标结合的强度 | nM / µM | 0.1 nM ~ 10 µM |
logIC50 / pIC50 | IC50 取对数(常以 -log10(IC50) 表示) | 无量纲 | 3 ~ 10 |
注意: 由于 IC50 值的尺度差异较大,直接使用原始数值会造成模型训练偏差,因此需要将其转换为对数尺度(如 pIC50 = -log10(IC50 [M]))。
2 数据转换:从 IC50 到 pIC50
假设我们从 ChEMBL 下载了原始 IC50 数据,单位为 nM,我们通常需要将其统一转换为 pIC50:
import numpy as np
import pandas as pd# 假设我们有如下 IC50 数据(单位为 nM)
data = pd.DataFrame({'compound_id': ['C001', 'C002', 'C003'],'ic50_nM': [50, 1000, 15000]
})# 转换为 M 单位(1 nM = 1e-9 M)
data['ic50_M'] = data['ic50_nM'] * 1e-9# 计算 pIC50(-log10(IC50 in M))
data['pIC50'] = -np.log10(data['ic50_M'])print(data)
输出:
compound_id ic50_nM ic50_M pIC50
0 C001 50 5.000e-08 7.30103
1 C002 1000 1.000e-06 6.00000
2 C003 15000 1.500e-05 4.82391
TIP: 在 log 转换前建议过滤极端值,如 IC50 < 1 nM 或 > 100 µM,避免无意义的数值影响模型训练。
3 离散标签划分(活性 / 非活性)
如果目标是分类任务(如预测一个分子是否对某靶点有活性),需要将连续的活性值转换为二元标签。
常见做法:
- 阈值法:设定某一 pIC50 阈值(如 pIC50 ≥ 6 认为有活性,即 IC50 ≤ 1 µM)。
- 多标签法:划分为高活性、中活性、低活性(例如 ≥7、5~7、<5)。
示例:
# 设置活性阈值为 pIC50 >= 6
data['active'] = data['pIC50'] >= 6
输出:
compound_id pIC50 active
0 C001 7.301 True
1 C002 6.000 True
2 C003 4.824 False
4 多靶点 / 多任务数据处理注意事项
在多靶点活性预测或多任务学习场景中,需对每个靶点分别设定活性阈值,并处理缺失值(如某个化合物对部分靶点无测定数据)。
建议:
- 使用
pivot_table
将数据转换为“化合物 × 靶点”的矩阵。 - 对缺失值进行标记(如 NaN 或 -1),并在建模时处理。
5 小结
活性数据标准化是数据预处理阶段的重要一步,直接关系到模型的学习质量和预测表现。通过对 IC50 等数据进行单位归一化、对数转换与标签化处理,可以将异构实验结果整合为统一建模格式,为机器学习与深度学习打下坚实基础。