type
status
date
slug
summary
tags
category
icon
password
1. 安装库和导入库
- 作用:这些命令用于安装必要的Python库。
q
标志用于抑制输出,使安装过程更简洁。
- 优化建议:与其每次都单独安装库,你可以创建一个
requirements.txt
文件,列出所有库及其版本,然后通过pip install -r requirements.txt
一次性安装所有库。
- 作用:导入必要的模块和库。每个库都有特定的作用:
os
,pickle
,tqdm
:用于文件操作,保存/加载模型,以及显示进度条。pandas
,numpy
:用于数据操作和数值计算。scikit-learn
组件:用于模型训练、特征选择和数据标准化。rdkit
:用于化学相关操作,如生成分子指纹。xgboost
,catboost
:用于高级机器学习模型。tensorflow
:用于深度学习模型。
- 优化建议:导入库的结构已经很好。确保只导入需要的内容,以保持代码简洁高效。
2. 特征提取函数
- 作用:禁用RDKit的日志记录,避免输出中出现不必要的警告信息。
- 优化建议:这是个好习惯,可以保持输出的清洁。
- 作用:
mfgen
函数:生成分子指纹,这是一种二进制向量,表示某些分子特征的存在与否。nBits=2048
:指纹向量的长度。radius=2
:半径决定了考虑的分子子结构的大小。eval
:将字符串位转换为整数(0或1)。
- 优化建议:使用
eval
可能存在安全隐患且速度较慢。更安全且更快的替代方法是使用列表推导式中的int(bit)
:
3. 加载数据和生成指纹
- 作用:
vec_cpd_lst
函数:将一列SMILES字符串转换为分子指纹。set
:去除重复的SMILES字符串,以节省计算时间。tqdm
:显示进度条,用于跟踪转换过程。smi_vec_map
:一个字典,用于将SMILES字符串映射到其指纹向量。
- 优化建议:
- 你可以使用类似
joblib
的库对SMILES到指纹的转换进行并行处理,以加快大数据集的处理速度。 - 如果
tqdm
影响速度,可以考虑使用一个更简洁的进度跟踪器。
4. 检查和加载数据集
- 作用:定义数据集文件的路径。
- 优化建议:无,需要的操作非常直观。
- 作用:确保数据集文件存在,如果文件不存在则抛出错误。
- 优化建议:你可以将这些检查合并为一个代码块,使代码更加简洁:
- 作用:将数据集加载到pandas DataFrame中,以便于后续数据操作。
- 优化建议:如果数据集很大,你可以使用
dask
或使用pandas.read_csv
中的chunksize
参数来更好地管理内存。
5. 提取和转换SMILES字符串
- 作用:从DataFrame列中提取SMILES字符串,并将它们转换为列表。
- 优化建议:无,这种方法已非常高效。
- 作用:将SMILES列表转换为指纹向量,并将它们连接起来,形成特征矩阵
train_x
。train_y
则是目标变量(产率)。
- 优化建议:
- 如果内存使用是个问题,您可以将中间结果(如指纹)保存到磁盘,并根据需要加载它们。
- 确保
vec_cpd_lst
对于大型数据集进行了优化,因为它是一个性能瓶颈。
6. 处理测试数据
- 作用:对测试数据执行与训练数据相同的操作,以生成用于预测的特征。
- 优化建议:与处理训练数据相似,可以考虑并行化和内存优化。
7. 标准化和特征选择
- 作用:标准化特征,使其均值为0,标准差为1,这有助于模型更快收敛并提高性能。
- 优化建议:无,这是标准做法。
- 作用:
- 使用
RandomForestRegressor
来识别并选择重要特征。 SelectFromModel
选择重要性高于某个阈值的特征。
- 优化建议:
- 你可以尝试不同的特征选择方法或调整阈值,以找到最佳的特征集合。
- 使用交叉验证来选择最佳特征,可能会提高模型性能。
8. 训练优化后的模型
- 作用:
- 定义多个优化后的回归模型:
RandomForestRegressor
:使用更多树木和更深的树提高模型的表现。XGBRegressor
:调整学习率和深度,使用gpu_hist
方法加速训练。CatBoostRegressor
:设置GPU加速,并调整深度和学习率。KNeighborsRegressor
:设置邻居数。GradientBoostingRegressor
:调整学习率、深度和树的数量。
- 优化建议:
- 可以通过交叉验证(如
GridSearchCV
或RandomizedSearchCV
)来进一步优化这些超参数。 - 你可以为每个模型保存最优参数,以提高预测准确性。
9. 训练模型
- 作用:训练各个模型,使用优化后的参数对选定的特征进行拟合。
- 优化建议:
- 对于每个模型,考虑加入交叉验证来评估模型的性能,确保模型不过拟合。
- 使用训练日志记录训练时间和模型性能,以便日后比较。
10. 定义并训练神经网络模型
- 作用:定义一个简单的神经网络模型:
input_dim
:输入层的维度。- *
Dense
*层:全连接层,分别有128和64个神经元,使用ReLU激活函数。 compile
:编译模型,使用Adam优化器和均方误差作为损失函数。
- 优化建议:
- 考虑使用正则化技术(如Dropout)以防止过拟合。
- 调整网络层数和神经元数量,可能会提高模型的表现。
- 使用
learning_rate_scheduler
来动态调整学习率,提高训练效率。
- 作用:
- 创建并训练神经网络模型。
epochs=50
:训练50轮。batch_size=32
:每批次使用32个样本。validation_split=0.2
:从训练集中分离20%数据作为验证集。
- 优化建议:
- 通过早停(Early Stopping)来自动停止训练过程,以避免过拟合。
- 尝试调整
epochs
和batch_size
,以找到最优的训练配置。
11. 创建堆叠和投票回归模型
- 作用:
StackingRegressor
:使用多个模型(如XGBoost、CatBoost等)作为基础模型,并使用另一个XGBoost模型作为最终的元模型,进行堆叠回归。
- 优化建议:
- 可以对元模型进行优化,选择更复杂的模型(如
RandomForestRegressor
或深度学习模型)作为元模型。
- 作用:
VotingRegressor
:通过投票方式组合多个模型的预测结果,最终取平均值。
- 优化建议:
- 尝试使用加权投票,给予表现较好的模型更高的权重。
12. 训练堆叠模型和投票回归模型
- 作用:训练堆叠模型和投票回归模型。
- 优化建议:
- 训练前,可以先对各个模型进行验证,确保其个体表现良好再进行堆叠或投票组合。
- 使用更多的特征或改进特征工程,可能会提高模型的准确性。
13. 保存和加载模型
- 作用:使用
pickle
保存堆叠模型和投票回归模型,以便之后加载使用。
- 优化建议:
- 可以使用
joblib
代替pickle
来保存模型,joblib
在保存大数组或复杂对象时性能更好。
- 作用:加载之前保存的模型,以便后续进行预测。
- 优化建议:无,这部分代码简单而高效。
14. 进行预测
- 作用:
- 使用堆叠模型、投票回归模型和神经网络模型对测试数据进行预测。
flatten()
将神经网络预测的结果从二维转换为一维数组。
- 优化建议:
- 可以使用不同模型的预测结果进行比较和分析,以选择最终的最佳预测方式。
15. 集成预测和生成提交文件
- 作用:将三个模型的预测结果取平均值,作为最终的预测结果。
- 优化建议:
- 可以尝试不同的集成方法,比如加权平均或通过逻辑回归进一步整合预测结果。
- 作用:
- 生成一个提交文件,其中包含预测结果,格式为
rxnid,Yield
。
- 优化建议:
- 在生成文件之前,可以对预测结果进行后处理(如剪裁或标准化),以确保提交结果在合理的范围内。
- 作用:确认提交文件已成功创建。
- 优化建议:无,这部分代码很直接。
- 作者:FXY
- 链接:https://ifxy.vercel.app/article/code
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。