function predicted = cosmo_classify_lda(samples_train, targets_train, samples_test, opt)
% linear discriminant analysis classifier - without prior
%
% predicted=cosmo_classify_lda(samples_train, targets_train, samples_test[,opt])
%
% Inputs:
% samples_train PxR training data for P samples and R features
% targets_train Px1 training data classes
% samples_test QxR test data
% opt Optional struct with optional field:
% .regularization Used to regularize covariance matrix. Default .01
% .max_feature_count Used to set the maximum number of features,
% defaults to 5000. If R is larger than this
% value, an error is raised. This is a (conservative)
% safety limit to avoid huge memory consumption
% for large values of R, because training the
% classifier typically requires in the order of 8*R^2
% bytes of memory
%
% Output:
% predicted Qx1 predicted data classes for samples_test
%
% Example:
% ds=cosmo_synthetic_dataset('ntargets',5,'nchunks',15);
% test_chunk=1;
% te=cosmo_slice(ds,ds.sa.chunks==test_chunk);
% tr=cosmo_slice(ds,ds.sa.chunks~=test_chunk);
% pred=cosmo_classify_lda(tr.samples,tr.sa.targets,te.samples,struct);
% % show targets and predicted labels
% disp([te.sa.targets pred])
% %|| 1 1
% %|| 2 2
% %|| 3 3
% %|| 4 4
% %|| 5 5
%
% Notes:
% - this classifier does not support a prior, that is it assumes that all
% classes have the same number of samples. If that is not the case an
% error is thrown.
% - a safety limit of opt.max_feature_count is implemented because a large
% number of features can crash Matlab / Octave, and/or make it very slow.
%
% (Contributions by Joern Diedrichsen, Tobias Wiestler, Nikolaas Oosterhof)
% # For CoSMoMVPA's copyright information and license terms, #
% # see the COPYING file distributed with CoSMoMVPA. #