Build wrapper for Matlab’s SVM classifier

Wrapper for two classes

Notes:

  • this exercise is based on Matlab’s SVM, and requires the Matlab statistics or bioinfo toolbox.

  • an alternative is using libsvm (using cosmo classify libsvm).

  • to use either SVM (whichever is present), you can use cosmo classify svm.

Matlab has an implementation of a support vector machine classifier that supports two classes. Its implementation uses two functions: svmtrain and svmclassify. Have a look at these functions’ signatures (help svmtrain and help svmclassify) and then write a wrapper that will have the same function signature as our generic classifer, but uses matlab’s SVM inside. Below is the signature and function header for our new function.

Test your solution using the first part of run classify svm

function predicted = cosmo_classify_matlabsvm_2class(samples_train, targets_train, samples_test, opt)

Hint: cosmo classify matlabsvm 2class skl

Solution: cosmo classify matlabsvm 2class / first part of run classify svm

Wrapper for multiple classes

Other classifiers (such as naive bayesian) support more than two classes. SVM classifiers can be used for multi-class problems. One approach is to classify based on all possible pairs of classes, and then take as the predicted class the one that was predicted most often. Thus, write a wrapper with the same function signature as the naive bayesian classifier but that uses the 2-class SVM classifier above. Test your solution using the second part of run classify svm.

function predicted = cosmo_classify_matlabsvm(samples_train, targets_train, samples_test, opt)

Hint: cosmo classify matlabsvm skl

Solution: cosmo classify matlabsvm skl / run classify svm

Extra exercise: write another multi-class SVM classifier that predicts using a one-versus-all scheme.

Extra exercise: compare the results from run classify svm with an SVM classifier to those of cosmo classify naive bayes.