我想使用matlab工具箱进行特征选择。那里有一个很好的函数,叫做sequentialfs,它做得很好。但是,我无法将其与 LibSVM 功能集成来执行特征选择。它与 KnnClassify 配合得很好,有人可以帮助我吗?这是 KnnClassify 的代码:
fun1 = @(XT,yT,Xt,yt)...
(sum((yt ~= knnclassify(Xt,XT,yT,5))));
[fs,history] =equentialfs(fun1,data,label,'cv',c,'选项',opts,'方向','前进');
最佳答案
您需要包装 libsvm 函数以在特定功能集上训练和测试 SVM。我建议在单独的 .m 文件中编写内容(尽管原则上我认为它可以放在匿名函数中)。像这样的东西:
function err = svmwrapper(xTrain, yTrain, xTest, yTest)
model = svmtrain(yTrain, xTrain, <svm parameters>);
err = sum(svmpredict(yTest, xTest, model) ~= yTest);
end
然后您可以使用以下方式调用sequentialfs
:
[fs history] = sequentialfs(@svmwrapper, ...);
(您可能需要检查 svmtrain
的参数顺序,我永远记不起它们应该是哪一边)。
这个想法是 svmwrapper 将训练 SVM 并在测试集上返回其错误。
匿名等效项是:
svmwrapper = @(xTrain, yTrain, xTest, yTest)sum(svmpredict(yTest, xTest, svmtrain(yTrain, xTrain, <svm parameters>) ~= yTest);
看起来不太好。
关于matlab - 使用带有 libsvm 的顺序文件系统进行功能选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10469837/