使用拆分表和完全独立表时评估准确率的差异(CreateML, Swift)

我正在使用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:第一种情况是好的结果,第二种是坏的结果。如果在新数据上测试得到的评估准确率过低,可能数据在质上有所不同。

换一种说法:如果验证准确率低于训练准确率,你的模型在数量上是坏的(过拟合);如果你的评估准确率低,你的模型在质量上对你打算使用的数据是不合适的。

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注