我正在尝试使用 SVM 对一个非常高维的数据集(一个 3249X40
矩阵)进行二元分类。我有五个类似的数据集。虽然我正确地从决策树中获得了结果(低但不同),但每次我可能使用任何数据集时,我都会从 SVM 中获得完全相同的结果。我按以下方式使用 svm:
svmModel = svmtrain(train_mat(trainIdx,:), groups(trainIdx), ...
'Autoscale',true, 'Showplot',false, 'Method','QP', ...
'BoxConstraint',2e-1, 'Kernel_Function','rbf', 'RBF_Sigma',1);
pred = svmclassify(svmModel, train_mat(testIdx,:), 'Showplot',false);
这是怎么回事?我正在使用这样的决策树:
tree=ClassificationTree.fit(train_mat(trainIdx,:),groups(trainIdx,:));
pred=tree.predict(train_mat(testIdx,:));
我从决策树中的这 5 个数据集得到了不同的结果(看起来也正确)。怎么了?是因为 SVM 无法处理与变量数量相比观测值非常少的数据集吗?
最佳答案
您可能需要找到 C(您所说的框约束)和 sigma 的组合来运行良好的 RBF 内核。这通常是通过交叉验证来完成的。即将训练数据分成两部分,对于框约束和 sigma 的每种组合,在一半上进行训练并在另一半上进行测试,在后一半上进行训练并在前一半上进行测试,对两个精度进行平均。用于测试获得最佳准确度的框约束和 sigma 组合。
这个问题涵盖了很多需要检查的事情Supprt Vector Machine works in matlab, doesn't work in c++
关于matlab - Matlab中SVM分类的异常结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16241638/