检测 SVM/SVC 的过拟合

数据挖掘 支持向量机 过拟合
2021-10-14 07:19:55

我正在使用 RBF 内核对 SVC 使用 3 折交叉验证和 C 和 gamma 参数的网格搜索,我的分类得分为 84%。

针对实时数据进行测试时,准确率为 70%(使用了 1500 个样本)。然而,当针对未见过的保留集进行测试时,准确度为 86%(8800 个样本,原始数据集的 20%)。

训练和保留数据集的 3 个类别分布均匀。

造成这种巨大差异的原因可能是什么?从带有支持集的模型的性能来看,它似乎并没有过度拟合?


编辑:

你是如何拆分数据集的? 数据最初是按顺序排列的。我编写了一个脚本,利用 CSPRNG 在训练集和支持集之间随机分割每个样本。然后在最后自动生成报告以显示每个集合中每个类的分布。分布非常接近相等。

你是怎么做网格搜索的? 通过SKlearn SVC网格搜索方法(GridSearchCV)。

网格搜索期间使用的数据点与未见过的保留集之间是否有任何重叠? 没有重叠,它们都来自初始集中的唯一时间戳。

实时数据是否来自与另一个相同的分布? 是的,实时数据来自同一来源,分布大致相同。

你怎么知道? 我有一个脚本来计算数据集中每个类的出现次数。

2个回答

实时数据似乎与您的其他数据有所不同。交叉验证显示了 84% 的准确率,在保留集上的准确率是 86%,这非常一致,并不表示过度拟合。实时数据的准确度为 70%,这是显着不同的。这表明实时数据在对分类器很重要的方式上有所不同。也许已经发生了概念漂移。

大多数情况下,训练数据的准确性与测试数据的准确性不同。这可能会发生,因为测试数据与测试数据完全不同。模型无法在看不见的数据(即测试数据)上表现良好。

为了最小化差异,需要确保模型在训练时考虑所有可能性,以便考虑大部分方差。

很多时候,在尝试学习方差时,模型的准确性会因为过度拟合或拟合不足的情况而受到影响。