2012-05-06 3 views
1

기능 선택을 위해 matlab 도구 상자를 사용하고 싶습니다. 거기에는 좋은 일을하는 sequentialfs라고하는 좋은 기능이 있습니다. 그러나 기능 선택을 수행하기 위해 LibSVM 기능과 통합 할 수 없었습니다. 그것은 KnnClassify 잘 작동, 누군가 제발 나를 도울 수 있습니다. 여기 KnnClassify 대한 코드는 다음libsvm을 통한 sequentialfs 기능 선택

fun1 = @ (XT, YT, Xt의이 YT) ...

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

[FS, 역사, 'CV'를 sequentialfs (fun1, 데이터 라벨 = , c, 'options', opts, 'direction', 'forward');

답변

3

특정 기능 세트에서 SVM을 테스트하고 테스트하려면 libsvm 함수를 래핑해야합니다. 별개의 .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); 

아주 좋은 보이지 않는다. 이 질문은 여전히 ​​열려있는 경우

+0

감사합니다.이 사람은 큰 도움이됩니다. 이것은 내가 쓴 것입니다 : svmwrapper = @ (TrainLbl, TrainData, TestLbl, TestData) sum (svmpredict (TestLbl, TestData, svmtrain (TrainLbl, TrainData, '-t 2 -c 8') ~ = yTest)); [fs, history] = 시퀀스 파일 (svmwrapper, train_label, train_data_w, test_label, test_data_w, 'options', opts, 'direction', 'forward'); –

+0

이 오류가 발생합니다 : sequentialfs (line 196)를 사용하는 중 오류 데이터 인수 X, Y, ...에 같은 수의 행이 있어야합니다. –

1

는 나도 몰라,하지만 난이 기능은 다음 핸들을 사용하여 작업 있어요 : 입력의 순서는
로 입력을 libsvm에 대한 svmpredict 및 svmtrain 중요하다

퍼센트을 % 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)