作者 | 薛雨阳 编辑 | 李仲深
本文由薛雨阳翻译编辑自 Machine Learning for Materials Scientists: An Introductory Guide Towards Best Practices. 希望对材料、化学即相关专业入门机器学习的同学有所帮助。
建模
选择合适的模型和特征
数据集的大小基本上可以确定您选择的机器学习模型。对于较小的数据集,经典的统计机器学习模型(例如回归,支持向量机,K近邻和决策树)更加合适。相比之下,神经网络需要大量数据,并且只有当您拥有成千上万个或者更多的训练数据条目时,神经网络才开始变得可行。通过 bagging
, boosting
以及 stacking
等方法,经典统计模型可以进一步改进其性能。现有许多封装好的 Python 库可以调用实现以上模型功能,其中最著名的可能是 scikit-learn
。对于较大的数据集,神经网络和深度学习方法更为常用。在学术界中, PyTorch
以及 TensorFlow
通常用于实现这些架构。
特征工程对于较小的数据集非常重要。如果通过精心设计其特征,则可以大大提高模型的性能 。将化学成分转换成可用于机器学习研究的可用输入特征的常用方法是基于成分的特征向量(Composition-based Feature Vectors, CBFVs),例如 Jarvis
, Mapie
, Mat2Vec
, Oliynyk
。这一系列的CBFVs包含了通过实验得出的值,通过高通量计算来得到的值,或者使用机器学习技术从材料科学文献中提取的值。除了使用CBFVs来进行特征化数据,您还可以尝试对元素进行简单的 one-hot
编码。这些CBFV特征化方案以及特征化化学成分都包含在GitHub项目中。
对于足够大的数据集和更有学习能力的架构,例如深度全连接网络 或者新兴的注意力机制架构(比如CrabNet),与简单的 one-hot
编码相比,特征工程和输入数据中领域知识的集成(例如CBFVs的使用)可能会变得无关紧要,并且不会为更好的模型性能做出贡献 。因此,由于需要整理和评估针对您的研究的领域知识功能,您可能会发现寻找其他的数据源,采用已经建立好的特征模式,或者使用不需要领域知识的学习方法会更有益。
数据放缩和标准化
在大多数情况下,放缩你的输入数据 X
可能会有所帮助。对于回归任务,可能按比例放缩目标 y
也有益处。通常,将输入数据缩放为具有 0
均值和单位方差。这样可以实现更稳定的梯度和更快的模型收敛速度。
这个操作可以通过以下变换来完成:
其中,
代表数据均值,
代表数据的标准差。在某些情况下,在根据等式缩放值之前将对数函数应用于值可能会更进一步改善模型性能。
请记住,缩放操作必须仅使用来自训练数据集的统计数据进行(也就是说,仅使用从训练数据计算出的均值和标准差值来缩放训练、验证和测试数据集),不能使用验证集和测试集的统计信息。并且,记得在计算loss之后撤销目标值的缩放操作。与数据缩放相似,建议对回归任务的输入数据采用标准化。在标准化时仅使用训练数据的统计数据也一样重要。 缩放和标准化不可交换:他们的顺序很重要。您应该先缩放再进行标准化。在撤销操作时,需要选择相反的操作:先取消标准化再取消缩放。
简而化之
有时,尤其是在数据集较小的情况下,简单的模型可能会比复杂的模型表现得好得多。您可以尝试使用一些更简单的模型,类似线性模型(岭/lasso)回归,随机森林或者k近邻。 此外,请考虑模型的复杂性和可解释性之间的权衡。通常,更复杂的模型可以实现更高的模型性能,但是要注意的是,这些模型通常不容易被人为解释。通常我们认为较为简单的模型更容易为人类理解,并且为模型自检带来了更多的机会。这是材料科学中需要着重考量的因素,因为合成和表征昂贵且费时。
超参数优化
根据您对机器学习模型的选择,可能会有模型超参数可以调整。超参数包括K近邻模型中的邻居数 K
,随机森林中数的数量和深度,支持向量机中的内核类型和系数,梯度提升中要考虑的最大特征数量以及神经网络中的损失函数、学习率和优化器。这些超参数是模型本身的属性,并且会严重影响模型的性能、速度(训练和推理中)以及复杂性。
模型在训练步骤中不会学习超参数;超参数是在创建模型时由您选择它们。建议优化模型超参数的方法是,使用相同的训练集训练多个模型,每个模型都是用不同的超参数集,然后使用相同的验证集评估模型的性能。通过这样做,您将能够识别通常导致性能良好的模型的超参数集。这通常称为“网格搜索(Grid Search)”。假设您的模型有两个连续变量超参数 h1
和 h2
,并且您要研究的每个参数都有一个范围的值 [h1min, h1max]
和 [h2min, h2max]
。那么您可以定义一个介于这两个取值范围之间的网格。在此网格的每个点上,您都是用训练集训练一个与 y
个参数集相对应的模型,然后再验证集上评估其性能。对网格上的每一个点重复此操作后,您将获得一个映射,然后可以使用该映射来确定针对特定模型和数据的最佳超参数集。
再次强调,在数据集拆分期间保留测试数据集的重要性。通过在训练和验证数据集上训练和优化模型,您已经有效地调整了模型(可能有偏差),以在这些数据样本上表现出色。因此,模型在这些数据集上的性能指标不再是模型真正的泛化能力的良好指标。在保留的测试数据集上评估模型的性能,将为您提供更为真实的估计。
模型评估和比较
通常,材料科学的研究将比较给定任务上机器学习模型和超参数组合的性能。机器学习中,在分类任务里,我们通过使用计算的测试指标(如准确性,对数损失,召回率,F1得分,ROC和AUC)在保留的测试数据集上评估其性能,从而比较训练后的模型;对于回归任务,我们使用r 皮尔森相关系数,平均绝对误差和均方根误差。还可以考虑使用交叉验证来得到更准确地估计模型的真实性能。
展示模型*
如果您想要发表一个新的模型结构或者算法,则有必要包含重现、评估和应用模型的所有相关信息。您需要为您的实现提供完整的源代码,使用的好参数,随机数种子,以及模型本身的预训练权重。此外,还应该提供新系统的清晰描述和原理图,以及重现模型和工作的说明。在理想的情况下,您可以通过交互方式展现你的模型和结果,例如使用 Jupyter Notebook。
原文链接
https://chemrxiv.org/articles/preprint/Machine_Learning_for_Materials_Scientists_An_Introductory_Guide_Towards_Best_Practices/12249752/1