使用拆分 Table 与完全分离 Table 时的评估准确度不同(CreateML,Swift)

Evaluation Accuracy is Different When Using Split Table Versus Completely Separate Table (CreateML, Swift)

我正在使用 CreateML 和 Swift 创建表格分类模型。我使用的数据集总共有大约 300 个项目,以及大约 13 个不同的特征。我已经 training/testing 以两种方式尝试了我的模型,结果 出人意料地截然不同 :

1) 从原始完整数据集中随机拆分我的训练和评估数据table:

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% 的评估准确率。)

我想知道为什么会有这么大的差异?哪种解读应该被视为更现实可信?我可以对这两种模型做些什么来提高准确性和可信度吗?另外:我对不同精度测量的含义以及我应该如何解释它们(训练、验证、评估)感到困惑?

谢谢。

accuracytraining/validation的意思是,如果后者低于前者,说明你的模型过拟合,也就是对训练集适应性太强,无法泛化。

所以你的第一个案例结果很好,第二个案例结果很差。

当您为模型提供的新(未见)数据在某些方面有很大不同时(这可能可以通过预处理或将其添加到训练集并重新训练模型来解决),评估准确度很低。

在第二种情况下,您的模型严重过拟合,并且这 10 个项目是从训练集中取出的,因此它们没有本质上的不同,这显然会给您很高的评估准确性。所以这是一个相当无用的测试。

不清楚第一种情况下评估准确度测试的数据是从哪里得到的。

TL;DR: 第一种情况是好的结果,第二种情况是不好的结果。如果对新数据的测试产生的评估准确度太低,则可能是数据在质量上有所不同。

还有一种不同的说法:如果验证精度低于训练精度,则您的模型在数量上是错误的(过度拟合);如果您的评估准确度较低,则您的模型在质量上 bad/unsuitable 适合您打算使用它的数据。