商业背景:https://www.kaggle.com/competitions/neurips-open-polymer-prediction-2025
数据背景:https://www.kaggle.com/competitions/neurips-open-polymer-prediction-2025/data
我开始这个项目时,查看了 5 个目标变量,试图找出可能与它们相关的属性。以下是我确定的自定义属性:
custom_feature_functions = {
'NumberOfSideChains': number_of_side_chains,
'MaxSideChainMW': max_side_chain_mw,
'BackboneLength': backbone_length,
'AverageSideChainMW': average_side_chain_mw,
'BranchPoints': count_branch_points,
'AtomCount': count_atoms_including_hydrogens,
'MassPerAtom': molar_mass_per_atom,
'MolarMass_per_HeavyAtom': molar_mass_per_heavy_atom,
'Percent_Hydrogen': percent_hydrogen,
'HydrogenDonors': count_hydrogen_donors,
'HydrogenAcceptorsWithF': count_hydrogen_acceptors_with_fluorine,
'RotatableBonds': count_rotatable_bonds,
'DoubleBonds': count_double_bonds,
'AromaticRingCount': count_aromatic_rings,
'MolarMass': calculate_molar_mass,
}
密度是质量/体积。所以我开始通过计算摩尔质量来搜索属性。我没有足够的计算资源来使用分子动力学或 DFT 来寻找分子的体积。所以我 settled 为计算原子数量作为一个快速近似。我发现质量/原子数量与密度高度相关,因此氟化分子比非氟化对应物重得多。氟的重量几乎是氢的 19 倍。氟原子周围的电子可能比氢原子附近的电子占据更多的体积,但似乎当涉及到分子密度时,体积差异并不能抵消质量差异。
氢键:氢原子上的部分正电荷会导致它被吸引到氧或氟等物质上的部分负电荷。氢键是造成水许多独特特性的原因。在聚合物的情况下,我的想法是增加的氢键可能会导致分子间吸引力,这将使分子更紧密地结合在一起。因此它会降低 FFV(自由体积分数)并增加密度。
支链和主链:似乎合理的是,大的侧链会相互阻碍,从而防止分子紧密堆积。对于具有许多侧链的分子也是如此,所以我记录了侧链的数量和最大侧链分子量,我假设这是体积的可接受替代物。如果键和侧链可以自由旋转,它们可能能够旋转出彼此的路径,从而允许更紧密的堆积,所以我记录了可旋转键的数量。
如果我编程能力更强,我会希望包含更多的立体化学信息。有可能一个具有许多大侧链且能够形成紧密晶体结构的分子,比一个侧链很少但无定形或具有大片自由空间的分子具有更高的密度、更低的 FFV 和更大的热导率。
我还从 RDkit 分子描述符中获取了大量特征,因为我认为更多的数据会使模型训练更容易。我确实对使用的描述符进行了限制。我想避免过拟合和噪声,所以我丢弃了仅描述少数分子的描述符,也丢弃了似乎与任何目标都不相关的描述符。
我训练了很多模型,当结果证明随机森林是我所使用的数据中最好的模型时,我感到很惊讶。模型性能似乎与模型复杂度成反比,因此创建 GNN 特征的图像识别模型表现可笑地差,而我的线性回归模型往往相当不错。这不仅是因为我没有足够的数据,我对一些更复杂的模型使用了大量数据增强,但结果仍然很差。我的随机森林参数是使用贝叶斯超参数搜索找到的。我相信我的最佳参数是:
max_depth=9, min_child_weight=6, subsample=0.40, colsample_bynode=1.00, eta=0.3000, gamma=0.00, alpha=0.000, lambda=1.361, trees=162, grow_policy=lossguide => Loss: 0.03218
我在提交中包含了模型训练函数。我是在扩展数据集发布之前进行此次提交的。使用补充数据可能会创造出比我自己的更好的模型。
如果我有更多时间,我会希望更多地尝试模型堆叠,这样我就可以潜在地改进随机森林实现的弱点。
我为缺乏可复现性道歉。我主要是一名化学家。我没有计算机科学背景。我参加竞赛主要是为了学习,所以我没有做好笔记。