Contents

Description of demo_ordinal_linear.m

Demonstrates unregularized and L2-regularized ordinal regression for classification, and ordinal logistic regression on a dataset with a relatively simple ordering defined along 1D

clear all
close all

% Generates nClasses, Xtrain, ytrain, Xtest, ytest
generateData_ordinal_1D

usage of ordinal least-squares regression

options_ls.nClasses = nClasses;
model_ls = ml_ordinal_regression(Xtrain, ytrain, options_ls);
yhatTest_ls = model_ls.predict(model_ls, Xtest);
yhatTrain_ls = model_ls.predict(model_ls, Xtrain);
testError_ls = sum(ytest~=yhatTest_ls)/length(ytest);
model_ls.trainError = sum(ytrain~=yhatTrain_ls)/length(ytrain);
fprintf('Averaged misclassification test error with %s is: %.3f\n', ...
        model_ls.name, testError_ls);
linear_makeOneContourPlot(Xtrain,ytrain, model_ls)
Averaged misclassification test error with Ordinal Least Squares is: 0.540

usage of ordinal ridge regression with CV on regularizer

options_cv = [];
options_cv.nFolds = 5;
options_cv.subModel = @ml_ordinal_regression;
options_cv.subOptions = [];
options_cv.subOptions.regressionFunc = @ml_regression_leastSquares;
options_cv.subOptions.nClasses = nClasses;
options_cv.paramNames = 'subOptions.lambdaL2';
options_cv.paramValues = 1e-4:1e-1:1e2;
options_cv.loss = 'mc';
model_cv = ml_general_CV(Xtrain, ytrain, options_cv);
yhatTest_ls = model_cv.predict(model_cv, Xtest);
yhatTrain_ls = model_cv.predict(model_cv, Xtrain);
testError_ls = sum(ytest~=yhatTest_ls)/length(ytest);
model_cv.subModel.trainError = sum(ytrain~=yhatTrain_ls)/length(ytrain);
fprintf('Averaged misclassification test error with %s is: %.3f\n', ...
        model_cv.name, testError_ls);
linear_makeOneContourPlot(Xtrain,ytrain, model_cv.subModel)
Averaged misclassification test error with CV on:  subOptions.lambdaL2 is: 0.548

usage of ordinal logistic regression

options_olr = [];
options_olr.nClasses = nClasses;
options_olr.verbose = 0;
model_olr = ml_ordinal_logistic(Xtrain, ytrain, options_olr);
yhatTest_olr = model_olr.predict(model_olr, Xtest);
yhatTrain_olr = model_olr.predict(model_olr, Xtrain);
testError_olr = sum(ytest~=yhatTest_olr)/length(ytest);
model_olr.trainError = sum(ytrain~=yhatTrain_olr)/length(ytrain);
fprintf('Averaged misclassification test error with %s is: %.3f\n', ...
        model_olr.name, testError_olr);
linear_makeOneContourPlot(Xtrain,ytrain, model_olr)
Averaged misclassification test error with Ordinal Logistic Regression is: 0.020