我想用MATLAB的做特征选择。 有一个很好的功能,那里叫sequentialfs,做了很好的工作。 然而,我无法将其与LIBSVM功能整合进行功能选择。 它的工作原理罚款KnnClassify,有人可以帮我请。 这里是KnnClassify的代码:
FUN1 = @(XT,YT,XT,YT)...
(sum((yt ~= knnclassify(Xt,XT,yT,5))));
[FS,历史] = sequentialfs(FUN1,数据,标签, 'CV',C, '选项',选择采用, '方向', '前');
你需要包裹LIBSVM职能培训和在一个特定的功能集测试的SVM。 我建议在一个单独的.m文件写的东西(虽然priciple我认为它可以在一个匿名函数去)。 就像是:
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);
这看起来并不很漂亮。
我不知道,如果这个问题仍然是开放的,但我得到的功能使用下面的手柄工作:
%的输入顺序依次为svmpredict和svmtrain去为LIBSVM采取输入作为重要
%ytrain,xtrain但sequentialfs发送数据作为xtrain,ytrain,XTEST,ytest
svfun = @(xtrain,ytrain,xtest,ytest)sum(svmpredict(ytest,xtest,svmtrain(ytrain,xtrain,<svm options>)) ~= ytest);
[fs history] = sequentialfs(svfun,x,y)