特点与LIBSVM sequentialfs选择(Features selection with s

2019-09-17 01:22发布

我想用MATLAB的做特征选择。 有一个很好的功能,那里叫sequentialfs,做了很好的工作。 然而,我无法将其与LIBSVM功能整合进行功能选择。 它的工作原理罚款KnnClassify,有人可以帮我请。 这里是KnnClassify的代码:

FUN1 = @(XT,YT,XT,YT)...

    (sum((yt ~= knnclassify(Xt,XT,yT,5))));

[FS,历史] = sequentialfs(FUN1,数据,标签, 'CV',C, '选项',选择采用, '方向', '前');

Answer 1:

你需要包裹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);

这看起来并不很漂亮。



Answer 2:

我不知道,如果这个问题仍然是开放的,但我得到的功能使用下面的手柄工作:

%的输入顺序依次为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)


文章来源: Features selection with sequentialfs with libsvm