模型在验证集上表现很好,但测试集的准确率却有点低,都有什么可能的原因呢?

网上也有一些这种问题,但好像跟我的情况不太一样,因为我基本排除了大家普遍认为的数据分布问题。
请看介绍:
我做的实验,官方只有训练集和测试集,数据类别都有三类,其中两个占比较小的类别的分布有些差异。
我用训练集的10%作为验证集,用来调参,测试集用来评估。
我的处理:
为了避免分布不均匀问题,我切分验证集时进行了两种切分方式,一种是随机切分,一种是验证集和训练集保持同分布,两种方式都能得到很理想的结果,准确率基本稳定在同一个百分点。
但测试集准确率却表现特别不好,跟验证集能差10个百分点左右。
排除数据处理方式
经再三确认,所有数据集的数据处理方式完全相同。
请问这种情况有什么可能的原因吗?重金悬赏,感谢!

你好,分析如下:
如果训练集与预测级的差10%左右,需要区分数据量的大小,数据集类别均衡,过拟合等问题:
1.如果数据量小,比如几千条这种,可以通过数据增强等方法构造数据;参考https://blog.csdn.net/weixin_44211968/article/details/120995096
2.如果数据集中,类别不均衡,可以通过过采样和下采样的方式保持样本的均衡,或是选取对样本不均衡表现较好的算法;参考https://zhuanlan.zhihu.com/p/556158050
3.如果上面问题都解决了,可以处理下过拟合问题:
3.1看看模型是否需要简化,如减少特征数量(随机森林选择合适特征),数据增强加大数据量;
3.2 是否采用正则化L1,L2
3.3 设置早停条件等

https://machinelearningmastery.com/the-model-performance-mismatch-problem/

原因大概分析存在2个因素:
1、检查你的训练集和验证集是否存在重合
2、若无重合,那基本可以确定你的训练集和验证集来自同一分布,测试集则来自另一分布。

数据集划分有问题?

有无训练过程中的一些指标数据?例如acc或者loss之类的曲线图像?有的话一起贴出来看下。
我倒是觉得你的验证集有点过于小了,一般来说,划分三个数据集的话需要在6:2:2左右的比例,但是看你秒速,训练集和验证集在9:1的比例,这样容易过拟合是一方面,还有另外一方面就是像你现在的模型泛化能力不行。
另外,你说的测试集比验证集差10个百分点,是跟训练阶段的验证集差10个百分点吗?还是模型训练完毕,自己测试的时候数据集路径改完之后差10个百分点?如果是和训练阶段的验证集差10个百分点,你试试看下在跑测试集的时候,测试集路径改成验证集路径看下这时候两个数据集差距多少。
或者在训练阶段将测试集当做验证集去训练,然后验证集当做测试集看下效果,如果此时还是差距10,说明你验证集和测试集分布还是有问题;如果此时差距小刀忽略不计的话,那就是验证集划分的太小了。

朋友,那你在切分验证集的时候用的是啥算法?直接随机分布嘛?

一种是验证集和训练集保持同分布 所以测试集分布问题