Contents

Description of demo_binaryclass_CV.m

Demonstrates usage of ml_general_CV on model parameters for binary classification, using logistic regression under RBF basis as exemplar

clear all
close all
generateData_vert

usage of RBF basis logistic regression

options_bs = [];
options_bs.subModel = @ml_binaryclass_logistic;
options_bs.subOptions.addBias = 1;
options_bs.subOptions.lambdaL2 = 7;
options_bs.basisFunc = @ml_kernel_rbf;
options_bs.basisOptions.sigma = 2;
model_bs = ml_binaryclass_basis(Xtrain, ytrain, options_bs);
yhat_bs = model_bs.predict(model_bs, Xtest);
testError_bs = mean(yhat_bs ~= ytest);
fprintf('Averaged misclassification test error with %s is: %.3f\n', ...
        model_bs.name, testError_bs);
figure;
plot2DClassifier(Xtrain, ytrain, model_bs)
Averaged misclassification test error with Binary Classification under Basis Change, RBF Kernel is: 0.049

usage of RBF basis logistic regression with CV on sigma

options_cv1 = [];
options_cv1.subModel = @ml_binaryclass_basis;
options_cv1.subOptions.subModel = @ml_binaryclass_logistic;
options_cv1.subOptions.subOptions.addBias = 1;
options_cv1.subOptions.subOptions.lambdaL2 = 2;
options_cv1.subOptions.basisFunc = @ml_kernel_rbf;
options_cv1.paramNames = 'basisOptions.sigma';
options_cv1.paramValues = [0.5 1 1.5 2 2.5]';
options_cv1.nParams = 1;
options_cv1.loss = 'mc';
model_cv1 = ml_general_CV(Xtrain, ytrain, options_cv1);
yhat_cv1 = model_cv1.predict(model_cv1, Xtest);
testError_cv1 = mean(yhat_cv1 ~= ytest);
fprintf('Averaged misclassification test error with %s is: %.3f\n', ...
        model_cv1.name, testError_cv1);
fprintf('Best %s is: %.3f\n', options_cv1.paramNames, model_cv1.bestParams);
figure;
plot2DClassifier(Xtrain, ytrain, model_cv1)
Averaged misclassification test error with CV on:  basisOptions.sigma is: 0.102
Best basisOptions.sigma is: 0.500

usage of sigmoid basis logistic regression with CV on sigma and lambda (L2 regularizer)

options_cv2 = [];
options_cv2.subModel = @ml_binaryclass_basis;
options_cv2.subOptions.subModel = @ml_binaryclass_logistic;
options_cv2.subOptions.subOptions.addBias = 1;
options_cv2.subOptions.basisFunc = @ml_kernel_rbf;
options_cv2.paramNames = {'basisOptions.sigma','subOptions.lambdaL2'};
options_cv2.paramValues = {[0.5 1 1.5 2 2.5], [0.5 1 1.5 2 2.5]};
options_cv2.nParams = 2;
options_cv2.loss = 'mc';
model_cv2 = ml_general_CV(Xtrain, ytrain, options_cv2);
yhat_cv2 = model_cv2.predict(model_cv2, Xtest);
testError_cv2 = mean(yhat_cv2 ~= ytest);
fprintf('Averaged misclassification test error with %s is: %.3f\n', ...
        model_cv2.name, testError_cv2);
fprintf('Best %s is: %.3f\n', options_cv2.paramNames{1}, ...
        model_cv2.bestParams(1));
fprintf('Best %s is: %.3f\n', options_cv2.paramNames{2}, ...
        model_cv2.bestParams(2));
figure;
plot2DClassifier(Xtrain, ytrain, model_cv2);
Averaged misclassification test error with CV on: basisOptions.sigma & subOptions.lambdaL2 is: 0.111
Best basisOptions.sigma is: 0.500
Best subOptions.lambdaL2 is: 0.500