训练集、验证集和测试集,林林总总的数据集合类型,到底该怎么选、怎么用?看过这篇教程后,你就能游刃有余地处理它们了。
问题
审稿的时候,不止一次,我遇到作者错误使用数据集合跑模型准确率,并和他人成果比较的情况。
他们的研究创意有的很新颖,应用价值较高,工作可能也做了着实不少。
但因对比方法错误,得出来的结果,不具备说服力。几乎全部都需要返工。
这里,我帮你梳理一下,该怎么使用不同的数据集合:
- 训练集(training set)
- 验证集(validation set)
- 测试集(test set)
目的只有一个——避免你踩同样的坑。
其实这个问题,咱们之前的教程文章,已有涉及。
《如何用 Python 和深度迁移学习做文本分类?》一文中,我曾经给你布置了一个类似的问题。
在文章的末尾,我们对比了当时近期研究中, Yelp 情感分类的最佳结果。
下表来自于:Shen, D., Wang, G., Wang, W., Min, M. R., Su, Q., Zhang, Y., … & Carin, L. (2018). Baseline needs more love: On simple word-embedding-based models and associated pooling mechanisms. arXiv preprint arXiv:1805.09843.
注意这里最高的准确率(Accuracy)数值,是 95.81 。
我们当时的模型,在验证集上,可以获得的准确率,是这个样子的:
97.28%,着实不低啊!
于是我问你:
咱们这种对比,是否科学?
你当时的答案是什么?
这么久过去了,又看了那么多新的教程和论文,你的答案发生变化了吗?
现在咱们公布一下答案吧。
不科学。
为什么?
因为对比方法有问题。
方法
原文中有这样一句:
这里数据集只提供了训练集和“测试集”,因此我们把这个“测试集”当做验证集来使用。
作为演示,数据集咱们想怎么用,就可以怎么用。
甚至你把测试集拿来做训练,然后在训练集上跑测试,都没有人管。
但是写学术论文,声称你的模型优于已有研究,却绝不能这么草率。
注意,比较模型效能数值结果时,你只能拿不同的模型,在同样的测试集上面比。
测试集不同,当然不可以。
但模型A用测试集,模型B用验证集(与A的测试集数据完全一致)比,可以吗?
很多人就会混淆了,觉得没问题啊。既然数据都一样,