#AI夏令营 #Datawhale #夏令营
学习时间:2024 年 7.1~7.7
学习活动基于讯飞开放平台分子性质预测挑战赛开展实践学习
目录
前言
利用所学知识,解决实际问题,加强动手能力
一、赛题背景与任务
1.背景
在当今科技日新月异的时代,人工智能(AI)技术正以前所未有的深度和广度渗透到科研领域,特别是在化学及药物研发中展现出了巨大潜力。精准预测分子性质有助于高效筛选出具有优异性能的候选药物。以PROTACs为例,它是一种三元复合物由目标蛋白配体、linker、E3连接酶配体组成,靶向降解目标蛋白质。本次大赛聚焦于运用先进的人工智能算法预测其降解效能,旨在激发参赛者创新思维,推动AI技术与化学生物学的深度融合,进一步提升药物研发效率与成功率,为人类健康事业贡献智慧力量。通过此次大赛,我们期待见证并孵化出更多精准、高效的分子性质预测模型,共同开启药物发现的新纪元。
2.任务
选手根据提供的demo数据集,可以基于demo数据集进行数据增强、自行搜集数据等方式扩充数据集,并自行划分数据。运用深度学习、强化学习或更加优秀人工智能的方法预测PROTACs的降解能力,若DC50>100nM且Dmax<80% ,则视为降解能力较差(demo数据集中Label=0);若DC50<=100nM或Dmax>=80%,则视为降解能力好(demo数据集中Label=1)。
机器学习问题通用流程
二、Task 1:初步了解,跑通baseline
在Datawhale贡献者团队的帮助下体验了一站式 baseline
- 导入库: pandas(用于数据处理和分析)和 LGBMClassifier(决策树分类器)等。
- 读取数据:代码通过使用 pd.read_excel 函数从文件中读取训练集和测试集数据,并将其存储在 traindata-new.xlsx 和 testdata-new.xlsx 两个数据框中。
- 特征工程:
- test数据不包含 DC50 (nM) 和 Dmax (%),将train数据中的 DC50 (nM) 和 Dmax (%)删除。
- LGB树模型训练和预测:
- 创建了一个 LGBMClassifier 的实例,即LGB分类器。
- 使用 fit 函数对训练集中的特征和目标进行拟合,训练了决策树模型。
- 对测试集使用已训练的模型进行预测,得到预测结果。
- 将预测结果和相应的 uuid 组成一个DataFrame,并将其保存到 submit.csv 文件中。
三、Task 2:深入了解相关知识并改进baseline
数据字段理解(由Datawhale贡献者团队提供)
赛题介绍部分并没有给出关于数据字段的具体介绍,所以这里对每个数据字段进行解释:
1.数据集包含了多个字段,如uuid(唯一标识符)、Label(降解能力的标签,0表示降解能力较差,1表示降解能力好)、Uniprot、Target、E3 ligase、PDB等,这些都是与PROTACs分子相关的信息。
2.还包括了降解能力相关的数值指标,如DC50(半数降解浓度)、Dmax(最大降解效率)、IC50(半抑制浓度)、EC50(半有效浓度)等。
3.还包括了与分子物理化学性质相关的字段,如Molecular Weight(分子量)、Exact Mass(精确质量)、XLogP3(预测的脂水分配系数)等。
具体说明如下:
- UUID: 一个唯一的标识符,用于识别数据记录。
- Label: 可能指的是化合物或数据集的标签或名称。
- Uniprot: 一个蛋白质数据库,提供关于蛋白质序列、结构和功能的信息。
- Target: 目标蛋白,即PROTACs设计来降解的特定蛋白质。
- E3 ligase: E3连接酶,一种在泛素化过程中扮演角色的酶,帮助标记蛋白质以供降解。
- PDB: 蛋白质数据银行,一个包含蛋白质和核酸结构的数据库。
- Name: 化合物的名称。
- Smiles: 一种表示分子结构的字符串格式。
- DC50 (nM): 半最大降解浓度,即达到最大降解效果一半时的化合物浓度。
- Dmax (%): 最大降解效率,表示化合物能实现的最大降解效果的百分比。
- Assay: 实验方法,这里可能指的是用于测定DC50、Dmax等的实验。
- Percent degradation: 分子降解的百分比。
- IC50 (nM, Protac to Target): 半最大抑制浓度,针对PROTACs与其目标蛋白的复合物。
- EC50 (nM, Protac to Target): 半最大有效浓度,即达到一半最大生物效应的浓度。
- Kd (nM, Protac to Target): 解离常数,表示PROTACs与其目标蛋白复合物的结合强度。
- Ki (nM, Protac to Target): 抑制常数,用于描述抑制剂与酶的结合强度。
- delta G, delta H, -T*delta S: 分别表示结合反应的吉布斯自由能变化、焓变和熵变,这些热力学参数用于描述分子间相互作用的能量状态。
- kon, koff: 分别表示分子结合和解离的速率常数。
- t1/2 (s, Protac to Target): 半衰期,即分子浓度减少到初始浓度一半所需的时间。
- Assay (Protac to Target, kon/koff/t1/2): 可能是指测定结合和解离速率常数以及半衰期的实验方法。
接下来的部分讨论了与E3连接酶的相互作用,以及形成的三元复合物(目标蛋白、PROTACs、E3连接酶)的类似参数。
- IC50, EC50, Kd, Ki: 与三元复合物相关的参数,与前面提到的类似,但这里特指三元复合物。
- delta G, delta H, -T*delta S: 描述三元复合物的热力学参数。
- kon, koff, t1/2: 描述三元复合物的动力学参数。
最后,描述了与细胞活性相关的参数,包括:
- IC50, EC50, GI50, ED50, GR50: 这些参数描述了化合物在细胞水平上的活性,如半最大抑制浓度、半最大效应浓度等。
- PAMPA Papp: 一种评估药物分子在仿生膜上的通透性的方法。
- Caco-2 A2B/B2A Papp: 使用Caco-2细胞系评估药物分子的肠道吸收能力。
- Article DOI: 文章的数字对象标识符,用于唯一标识科学文献。
- Molecular Weight, Exact Mass: 分子量和精确质量。
- XLogP3: 预测的辛醇/水分配系数,用于预测脂溶性。
- Heavy Atom Count, Ring Count: 重原子数和环的数量。
- Hydrogen Bond Acceptor/Donor Count: 氢键受体/供体计数。
- Rotatable Bond Count: 可旋转键的数量。
- Topological Polar Surface Area: 拓扑极性表面积。
- Molecular Formula, InChI, InChI Key: 分子式、国际化学标识符及其密钥。
尝试改进baseline:
1.修改决策树分类器参数:将学习率learning_rate调整为0.001,迭代次数(决策树的数量)调整为200
得到结果为:0.76789
2.采用随机森林分类器:RandomForestClassifier(n_estimators=100, random_state=42)
得到结果为:0.73004
3.采用梯度提升分类器:HistGradientBoostingClassifier(max_iter=100)
得到结果为:0.7013
四、Task 3:进阶->数据预处理与特征工程
1.数据预处理是在数据分析和建模之前对原始数据进行的一系列操作,旨在将数据转换为更适合分析和建模的形式。这些操作通常包括数据清理(处理缺失值、异常值、重复值等)、数据集成(合并多个数据源的数据)、数据变换(标准化、归一化、编码等)和数据规约(减少数据量但保留关键信息)。
2.特征工程则是从原始数据中提取、构建和选择对建模有用的特征的过程。这包括特征构建(通过组合、转换或衍生新的特征)、特征选择(选择最相关和有信息量的特征)和特征提取(将高维数据转换为低维表示)。
查看赛题数据可知(如下图),数据存在大量缺失以及无用数据等,进而需要提高数据质量,增强数据的可用性和可理解性,从而提高后续分析和模型训练的效果和准确性
# test数据不包含 DC50 (nM) 和 Dmax (%),将train数据中的DC50 (nM) 和 Dmax (%)删除
train = train.drop(['DC50 (nM)', 'Dmax (%)'], axis=1)
# 当测试数据集中每列特征的非空值小于15个时删除该特征。
def remove_features_with_few_non_nulls(data):
for col in data.columns:
if data[col].notnull().sum() < 15:
data.drop(col, axis=1, inplace=True)
return data
train = remove_features_with_few_non_nulls(train)
test = remove_features_with_few_non_nulls(test)
num_train_rows = len(train) #用于后续将train, test分离
# 使用pd.concat将清洗后的训练集和测试集合并成一个名为data的DataFrame,便于进行统一的特征工程处理
data = pd.concat([train, test], axis=0, ignore_index=True)
#独立热编码 One-Hot Encoding
data = pd.get_dummies(data)
data.fillna(0, inplace=True) #剩余的所有缺失值用0填充
cols = data.columns[2:]
# 无量纲化
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
scaler = scaler.fit(data[cols])
data[cols] = scaler.transform(data[cols])
data = pd.DataFrame(data)
经过对数据的处理后:
1.采用随机森林分类器:RandomForestClassifier(n_estimators=100, random_state=42)
得到结果为:0.76732
2.采用SVM 分类器:svm.SVC(kernel=‘linear’)
得到结果为:0.73937
五、Task4:持续尝试,上分!
神经网络
神经网络在多特征二分类问题上有广泛应用,
以下是一般的实现步骤,用于处理具有多个特征的二分类任务:
步骤如下:
- 准备数据集:拥有多个特征(输入变量)和对应的二分类标签(0 或 1)。
- 定义神经网络模型:模型通常由多个线性层和非线性激活函数组成。
- 选择损失函数:对于二分类问题,常用的损失函数是二元交叉熵损失(Binary Cross Entropy Loss)。
- 选择优化器:例如随机梯度下降(SGD)等,用于更新模型的参数以最小化损失。
- 训练模型:通过前向传播计算预测值,根据损失函数进行反向传播来更新参数。
- 进行预测:使用训练好的模型对新的数据进行分类预测。
根据赛题数据特点,在多特征二分类问题上常用的神经网络模型中选择MLP(多层感知机)。
多层感知机(Multilayer Perceptron,MLP)
由多个全连接层组成,能够学习特征之间的复杂非线性关系。
总结:
对项目的背景、应用领域等有基本的了解,并在本赛题数据背景下做了相关方向的思考,如分类方法分类器的选取,处理数据的特征工程、调整分类器的参数等,以此来获得更好的分类性能。