我的数据集中是否存在过度拟合的问题?

数据挖掘 特征选择 支持向量机 matlab 过拟合
2021-10-13 12:17:33

我已将顺序前向选择应用于具有 214 个样本和 515 个特征(2 类问题)的数据集。特征选择算法选择了 8 个特征。现在我已经在这 8 个特性上应用了 svm (MATLAB)。添加更多功能后,我还尝试查看性能。下表给出了算法(训练数据集)的正确率以及使用的特征集。得到的结果是:

8 个特征 = 0.9392
10 个特征 = 0.9439
12 个特征 = 0.9672
14 个特征 = 0.9672
16 个特征= 0.9626
18 个特征 = 0.9766
20 个特征 = 0.9672


可见,准确性似乎提高了。是不是因为过拟合?我应该使用 Matlab 的 sequencefs 函数给出的默认功能集,还是应该强制它提供更多功能以获得更高的准确性?
在此处输入图像描述 我已经上传了验证训练和测试性能 (70-15-15)。现在你能告诉我我的数据是否过度拟合吗?

1个回答

仅根据训练集的准确性无法判断机器学习算法是否过拟合。

您可能是对的,在小数据集上使用更多特征会增加采样误差并降低您正在构建的 SVM 模型的泛化性。这是一个有道理的担忧,但你不能肯定地说只有这种担忧和训练准确性。

通常的解决方案是保留一些数据以测试您的模型。当你看到训练准确率高但测试准确率低时,这是过度拟合的典型标志。

通常,您正在寻找模型的最佳超参数。在您的情况下,您正在尝试发现要使用的最佳功能数量。当您开始这样做时,您将需要进行多次测试以选择最佳的超参数值。那时,单个测试集对真实泛化的衡量变得较弱(因为您已经进行了多次尝试并选择了最佳值 - 仅通过选择过程,您往往会高估泛化)。所以通常的做法是把数据分成三种方式——训练集、交叉验证集和测试集。交叉验证集用于在更改模型参数时检查准确性,选择最佳结果,然后最终使用测试集来测量最佳模型的准确性。用于此目的的常见分流比是 60/20/20。

在使用 train/cv/test 拆分时采取务实的方法,与简单地使用数据和模型类获得最佳结果相比,过度拟合或拟合不足并不重要。您可以使用有关您是否过拟合(高训练准确度,低 cv 准确度)的反馈来更改模型参数 - 例如,当您过拟合时增加正则化。

当有少量示例时,例如您的情况,则 cv 准确性度量将根据 cv 集中的哪些项目而有很大差异。这使得选择最佳超参数变得困难,因为它可能只是数据中的噪声使一个选择比另一个更好。为了减少这种影响,您可以使用k 折交叉验证- 多次拆分您的 train/cv 数据,并对准确度(或您想要最大化的任何指标)进行平均测量。


在您的混淆矩阵中,没有过度拟合的证据。100%* 的训练准确率和 93.8% 的测试准确率表明存在某种程度的过拟合,但样本量太小而无法读取任何内容。您应该记住,过拟合和欠拟合之间的平衡非常狭窄,大多数模型都会在某种程度上做到其中之一。

* 100% 的训练准确度几乎总是暗示过度拟合。与例如 99% 的测试准确率相匹配,您可能不会太在意。最糟糕的问题是“我可以通过增加一点正则化来做得更好”吗?然而,与约 60% 的测试准确率相匹配,很明显你实际上已经过拟合了——即使在尝试了许多不同的超参数值(包括一些增加正则化的尝试)之后,如果这是你能达到的最好的情况,你也可能被迫接受这种情况。