How to do a ROC analysis using Matlab build-in SVM (Not LibSVM)

13 次查看(过去 30 天)
Hi all,
Just wondering anyone knows how to do a ROC analysis using Matlab build-in SVM? This question has been asked by millions of times on the web, but no answer.
svmStruct = svmtrain(featureSelcted, groundTruthGroup, 'Kernel_Function', 'rbf', 'Method', 'QP');
svmClassified = svmclassify(svmStruct,featureSelcted);
% Predict resubstitution response of SVM classifier
SVMScore ???
% Fit probabilities for scores
[FPR, TPR, Thr, AUC, OPTROCPT] = perfcurve(groundTruth(:,1), SVMScore(:,1), 1);
Essentially, we need a function to get the '*scores*' of the SVM classifier (SVMScore). Thanks!
A.

采纳的回答

Ilya
Ilya 2013-3-21
Well, there is an answer here http://www.mathworks.com/matlabcentral/answers/64475-does-anybody-have-expertise-with-matlab-svm-classifier, with a reference to another thread. I am collecting all the pieces in one place.
Assume your class labels are -1 and +1, assume that you have trained with 'autoscale' set to true by default, let svm be the struct for the trained SVM model, and let Xnew be the new data for which you need to compute the soft scores.
shift = svm.ScaleData.shift;
scale = svm.ScaleData.scaleFactor;
Xnew = bsxfun(@plus,Xnew,shift);
Xnew = bsxfun(@times,Xnew,scale);
sv = svm.SupportVectors;
alphaHat = svm.Alpha;
bias = svm.Bias;
kfun = svm.KernelFunction;
kfunargs = svm.KernelFunctionArgs;
f = kfun(sv,Xnew,kfunargs{:})'*alphaHat(:) + bias;
f = -f; % flip the sign to get the score for the +1 class
Then call perfcurve(true_labels,f,1).
  7 个评论
Tahir
Tahir 2015-5-8
Hi, i just use the code ...but i have confusion about the line
f = -f; % flip the sign to get the score for the +1 class
why this flipping?? i use labels 0 and 1...still i should flip the f.??
Farag Zbeda
Farag Zbeda 2015-6-3
Hi Ilya
What do yo mean by true_labels when calling perfcurve(true_labels,f,1)? I guess they are the test instances labels. If so, how to calculate them?
Thanks
Faraj

请先登录,再进行评论。

更多回答(1 个)

Mehrdad Heydarzadeh
Hi Aaronne, It seems that your problem has been answered. But there is a shorter way of doing that using Matlab functions. Just have a look at the second example in following link: http://www.mathworks.com/help/stats/perfcurve.html

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by