在 SVC 中添加更多功能会导致性能下降,甚至使用正则化

数据挖掘 机器学习 分类 scikit-学习 支持向量机 过拟合
2022-02-15 18:24:39

我有一个相对较小的数据集,包含 30 个带有二进制标签的样本(16 个正样本和 14 个负样本)。对于这些样本,我还有五个连续特征。我正在尝试使用支持向量分类器 (SVC) 来完成此任务。我使用留一法交叉验证在分类任务中测试了不同特征组合和正则化强度的性能。

我发现的一件奇怪的事情是,如果我将特征 A 单独用于分类,我可能会得到 87% 的分类准确率。如果我单独使用特征 B,我可能会获得 60% 的分类准确率(即,与多数分类器基线相同)。但是结合所有的特征,我只能得到 63% 的分类准确率。尽管在大范围的正则化强度上进行了搜索,但仍然如此。

万一这很重要,我正在使用 sklearn SVC 实现,并改变正则化参数 C。

这种行为是 SVC 分类器的典型行为吗?一般来说,我对这种支持向量算法不太熟悉。

1个回答

30 个样本可能还不够。您想要使用的功能越多,您需要的样本就越多 - 否则您将获得巨大的模型不稳定性和过度拟合(尤其是对于不良/无用的功能)。只有 30 个样本,您可能会通过 1 或 2 个精心挑选的特征获得“最佳”结果。获取 100 或 200 个样本,然后使用 5 个特征重试。

还要确保你正在标准化你的特征——例如通过删除平均值和缩放到单位方差。SVM 不喜欢比其他功能大很多的功能。