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

4 ビュー (過去 30 日間)
Aaronne
Aaronne 2013 年 3 月 21 日
回答済み: Mehrdad Heydarzadeh 2016 年 8 月 10 日
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
Mehrdad Heydarzadeh 2016 年 8 月 10 日
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

カテゴリ

Help Center および File ExchangeDiscriminant Analysis についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by