584. Open Problems – Single-Cell Perturbations | open-problems-single-cell-perturbations
总体而言,我将这个问题视为一个包含2个特征列和18211个目标的回归问题,但我曾尝试在神经网络中使用LSTM单元来利用SMILES序列。sm_name列和SMILES列可以完全以相同的方式进行编码,因此可以用SMILES列替换sm_name列。此外,SMILES列包含的信息更为丰富,因为序列中的每个字符都可以被编码(而不仅仅是像sm_name那样编码为单个值),且这些字符的顺序提供了额外的信息。从理论上讲,使用SMILES列的神经网络性能最差也不会比使用原始列更差。遗憾的是,我用这个神经网络取得的公开分数并不理想,因此我停止了进一步的研究。
为简化分析,这里仅针对不含伪标签的最佳单模型进行讨论。由于mrrmse指标对异常值敏感,因此需要检查各列数值范围的分布情况。

大多数列的数值范围位于区间(4, 50)内。自然而言,数值范围较大的列会导致较高的mae或mse,因此为了确定哪些基因易于或难以预测,我们采用了标准化(除以标准差)的逐列mse方法。下表展示了最难预测和最易预测的基因。

下图展示了所采用的交叉验证方案。每个折叠包含一种从NK细胞、CD4+T细胞、CD8+T细胞、调节性T细胞中选择的细胞类型,且仅包含同时出现在公开和私有测试集中的sm_name。该验证分割方案的最低分值与公开和私有数据集的最低分值相对应。我认为这是一种可靠的分割方式,而最佳分割方案取决于模型架构,因此每个模型都可以有其最适合的验证分割。

各细胞类型的学习难易程度如下图所示。

损失值存在差异,因为它们是在截断空间中计算的。CD4+T细胞和NK细胞学习效果良好。调节性T细胞较难训练。CD8+T细胞在验证集上的提升较弱。这种分割使用了约25%的数据进行验证,因此我相信存在更可靠的分割方式。我提出的新分割方案如下:

这种分割与之前类似,但在每个验证折叠中,随机选择的样本会被移至训练集。让我们验证新分割对训练的影响。

对于每种细胞类型,更多数据都提升了在相同、恒定且较小的验证集上的性能。此次指标在完整维度上计算。480个训练样本处的首个数值对应于之前的分割方案。理论上,将验证集大小减少至一个样本可获得最佳性能。由于这与在整个数据集上训练非常相似,因此最终采用了此方案。
预测系统分为两个阶段,因此我发布了两个版本的notebook。
第一阶段预测伪标签。老实说,如果我仅停留在这一版本,我将无法获得第三名。
所有测试数据(255行)的预测伪标签会被添加到第二阶段的训练中。
该系统的主要部分是一个神经网络。每个神经网络及其环境都通过optuna进行了优化。已优化的超参数包括:
丢弃率、各层神经元数量、嵌入层输出维度、训练轮数、学习率、批次大小、截断奇异值分解的维度数。
优化在自定义的4折交叉验证上完成。为避免optuna过拟合交叉验证,我对每折应用了2次重复并取平均值。通常来说,重复次数越多越好。optuna的评估标准是MRRMSE。
最终融合了7个模型。再次使用optuna确定线性组合的最佳权重。此时测试集的预测结果即为伪标签,将用于第二阶段。
将伪标签(255行)添加到训练数据集中。我应用了在不同实验中优化参数的20个模型以增加模型多样性。
Optuna再次选择了预测线性组合的最优权重。
模型具有较高方差,因此每个模型在整个数据集上训练10次,并以预测值的中位数作为最终预测。预测结果还会根据逐列最小值和最大值进行裁剪。
改进历史:
对我不起作用的方法:
我测试了3种鲁棒性:增加数据集大小、向标签和输入添加噪声。向输入添加噪声完全失败,这对我来说是合乎逻辑的,因为名义值和类别值被改变并表现为连续值,这是不利的。
让我们观察在40%、50%、...、100%训练数据集上的性能。从40%开始,是因为奇异值分解受样本数量限制。

实验重复了5次,因此可见不确定区间。更多数据显著提升了性能。
最后的鲁棒性测试是向标签添加噪声。在标签上添加了随机高斯噪声(均值为0,尺度为标准差的倍数)。

添加少量噪声(0.01 * 标准差)甚至能提升模型性能。总体而言,模型对噪声具有鲁棒性。
GitHub上的代码已包含文档说明。
GitHub代码:
代码仓库
Notebook:版本264为第一阶段,版本266为第二阶段
Notebook链接。
代码在Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz处理器和8GB内存上运行约需1小时。