我正在使用CreateML和Swift创建一个表格分类模型。我使用的数据集总共有大约300个项目,以及大约13个不同的特征。我尝试了两种方式来训练和测试我的模型,并且得到了令人惊讶的截然不同的结果:
1) 从原始完整数据集中随机拆分我的训练和评估数据表:
let (classifierEvaluationTable, classifierTrainingTable) = classifierTable.randomSplit(by: 0.1, seed: 4)
我对.1的拆分比例和4的种子数做了一些调整,但结果波动很大:在某些情况下,评估准确率可能是33%或80%。(在这种情况下,我得到了78%的训练准确率,83%的验证准确率,75%的评估准确率。)
2) 我从原始数据集中手动选取了10个项目,并将它们放入一个新的数据集以便稍后测试。然后,我从用于训练的300个项目数据集中移除了这些项目。当我测试这10个项目时,我得到了96%的评估准确率。(在这种情况下,我得到了98%的训练准确率,71%的验证准确率,96%的评估准确率。)
我想知道为什么会有这么大的差异?哪个读数应该被视为更现实和可信?有什么我可以做的事情来提高模型的准确性和可信度吗?另外:我对不同准确性测量的含义感到困惑,以及我应该如何解释它们(训练、验证、评估)?
谢谢。
回答:
训练/验证准确率的含义是,如果后者低于前者,你的模型出现了过拟合,即过度适应了训练集,无法正确泛化。
所以你的第一种情况产生了好的结果,而第二种情况产生了坏的结果。
当你输入模型的新(未见过的)数据在某些方面有很大差异时,评估准确率会很低(这可以通过预处理解决,或者通过将这些数据添加到训练集中并重新训练模型来解决)。
在第二种情况下,你的模型严重过拟合,并且这10个项目是从训练集中取出的,所以它们在本质上没有很大差异,这显然会给你一个高的评估准确率。所以这是一个相当无用的测试。
不清楚你在第一种情况下的评估准确率测试数据是从哪里来的。
TL;DR:第一种情况是好的结果,第二种是坏的结果。如果在新数据上测试得到的评估准确率过低,可能数据在质上有所不同。
换一种说法:如果验证准确率低于训练准确率,你的模型在数量上是坏的(过拟合);如果你的评估准确率低,你的模型在质量上对你打算使用的数据是不合适的。