2

我正在尝试使用 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 无法处理与变量数量相比观察值很少的数据集吗?

4

1 回答 1

2

您可能需要为运行良好的 RBF 内核找到 C(您称之为框约束)和 sigma 的组合。这通常通过交叉验证来完成。那就是将您的训练数据分成两部分,对于盒子约束和 sigma 的每种组合,在一半上训练并在另一半上进行测试,在下半场进行训练并在上半场进行测试,平均两个准确度。用于测试获得最佳精度的框约束和 sigma 组合。

这个问题涵盖了很多东西来检查Supprt Vector Machine 在 matlab 中的工作,在 c++ 中不起作用

于 2013-04-26T17:06:24.077 回答