我的机器学习模型大大适合了训练数据,但在测试数据上仍然表现良好。使用神经网络方法时,每次迭代都会稍微提高测试集的准确性,但会大大提高训练集的准确性(过拟合)。
将spacy与CNN架构配合使用时,该问题得到了很好的展示,我得到了以下结果
ITER LOSS P R F TF
0 29.305 0.733 0.342 0.466 0.525
1 10.410 0.811 0.443 0.573 0.650
2 4.361 0.722 0.548 0.623 0.757
3 2.265 0.764 0.563 0.648 0.811
4 1.449 0.748 0.613 0.674 0.877
TF是火车数据上的f1分数。
测试分数不断提高,而与训练集的差异仅增加到模型在训练数据上的第20次迭代中几乎完美表现的水平,而测试精度却从未降低以证明尽早停止。
我尝试了许多正则化选项,包括变化的辍学,权重衰减,L2,但似乎没有一个能够避免记住部分训练数据,并且在测试集上的表现都较差。
这个问题不是spacy和我所遵循的方法所独有,它也发生在scikit和参数较少的模型中。
现有数据集是一个少于2000个示例的小型数据集,这是一个多标签文本分类任务。某些标签的示例少于100个,但在检查过度拟合发生的位置时,所有标签似乎受到的影响均相同。
我想我的主要问题是,我是否应该担心该模型会记住训练数据集,只要它在测试数据上表现良好,还有是否我没有考虑其他问题来解决这个问题我所看到的记忆问题。
答案 0 :(得分:0)
为澄清起见,您的损失函数始终在训练集中计算,因此可能在训练集中发生过拟合。要观察是否存在过度拟合,请使用DEV集(不应将其作为训练集的一部分。)。在每个时期结束时,分别计算训练集和开发集的损失。减少开发集上的损失函数可以很好地拟合模型。同时,越来越多的损失表明过度拟合。 (您可以在此时稍有耐心地使用早期停止功能。但是始终可以使用检查点来节省执行最佳操作的负担)。而且收敛所需的历元数取决于学习率,因此,非常低的学习率可能需要很多历元才能适合模型。