SVM 对高维数据的分类率相对较低,尽管 2-D 投影显示它们是可分离的

机器算法验证 支持向量机 下定决心
2022-04-04 00:12:25

我还有 14000 个特征和 500 个训练样本的问题。这是一个二元分类问题,近似椭圆的形式。我使用二次多项式内核和通过 CV 的分类准确度约为 80%。但是,我随机尝试将数据投影到 2-D 上,即我只是挑出两个特征并投影它们,发现有几种组合可以让我 100% 分离。我还使用了 RB 内核,分类准确率约为 70%。有没有人有发生这种情况的原因?

这是我用于 libsvm 的代码...

% train SVM model
model = svmtrain2(Y(train_vec,1),X(train_vec,:),['-t 1 ' '-d 2 ' '-g ' num2str(grid_data(i,1)) ' ' '-r ' num2str(grid_data(i,2)) ' ' '-c ' num2str(C)]);
% test model on test set 
[predict_label, accuracy, dec_values] = svmpredict(Y(test_vec,1),X(test_vec,:),model); 
3个回答

我没有看到你的结果有什么问题。正如其他人已经指出的那样,您正面临一个典型的PN情况,其中预测变量(即特征)的数量远大于实例的数量。

在这种情况下,SVM 通常是一个不错的选择,因为它的最大边距属性为泛化性能提供了一些保证。但在这种情况下,我会选择线性内核而不是多项式或 RBF 内核。因为具有 14000 个特征的线性内核已经非常强大了。如果你后来发现线性核的表示能力不够,你可以尝试一些更强大的核来代替。

正如您提到的,数据可以很好地与较少的预测变量分离,您可能希望首先摆脱一些预测变量。一般来说,我们尽量避免的情况。也许您想使用一些 Lasso 方法为您做一些隐式特征选择。PN

来自 Rasmussen 的机器学习高斯过程:

在维度为的特征空间中,如果则总会有一个分离的超平面。然而,这种超平面可能不会产生良好的泛化性能,尤其是在某些标签不正确的情况下。NN>n

也就是说,如果维度多于数据点,则数据将是线性可分的,但这并不一定意味着数据可以完美分类。

当特征多于模式时,线性内核通常是一个好主意,因为其他答案建议(+1),但是真正重要的事情是仔细设置正则化参数(C)(使用例如交叉验证)。很大程度上是支持向量机的正则化产生了它们良好的泛化性能(简单地选择岭参数的岭回归通常在实践中同样好)。