使用拆分表和完全独立表时评估准确率的差异(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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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