diff options
Diffstat (limited to 'FEAST/FSToolbox/feast.m')
-rw-r--r-- | FEAST/FSToolbox/feast.m | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/FEAST/FSToolbox/feast.m b/FEAST/FSToolbox/feast.m new file mode 100644 index 0000000..96a685e --- /dev/null +++ b/FEAST/FSToolbox/feast.m @@ -0,0 +1,100 @@ +function [selectedFeatures] = feast(criteria,numToSelect,data,labels,varargin) +%function [selectedFeatures] = feast(criteria,numToSelect,data,labels,varargin) +% +%Provides access to the feature selection algorithms in FSToolboxMex +% +%Expects the features to be columns of the data matrix, and +%requires that both the features and labels are integers. +% +%Algorithms are called as follows +% +%[selectedFeatures] = feast('algName',numToSelect,data,labels) +% where algName is: +% mim, mrmr, cmim, jmi, disr, cife, icap, condred, cmi, relief +% +%[selectedFeatures] = feast('algName',numToSelect,data,labels,beta) +% where algName is: +% mifs (defaults to beta = 1.0 if unspecified) +% +%[selectedFeatures] = feast('algName',numToSelect,data,labels,beta,gamma) +% where algName is: +% betagamma +%[selectedFeatures] = feast('algName',numToSelect,data,labels,threshold) +% where algName is: +% fcbf (note this ignores the numToSelect) +% +% The license is in the license.txt provided. + + +%Internal FSToolbox Criteria to number mapping +%MIFS = 1 +%mRMR = 2 +%CMIM = 3 +%JMI = 4 +%DISR = 5 +%CIFE = 6 +%ICAP = 7 +%CondRed = 8 +%BetaGamma = 9 +%CMI = 10 +% + +if ((numToSelect < 1) || (numToSelect > size(data,2))) + error(['You have requested ' num2str(numToSelect) ' features, which is not possible']); +end + +finiteDataCount = sum(sum(isfinite(data))); +finiteLabelsCount = sum(sum(isfinite(labels))); + +totalData = numel(data); +totalLabels = numel(labels); + +if ((finiteDataCount ~= totalData) || (finiteLabelsCount ~= totalLabels)) + error(['Some elements are NaNs or infinite. Please check your data']); +end + +if (strcmpi(criteria,'mim')) + selectedFeatures = MIM(numToSelect,data,labels); +elseif (strcmpi(criteria,'mifs')) + if (nargin == 4) + beta = 1; + else + beta = varargin{1}; + end + selectedFeatures = FSToolboxMex(1,numToSelect,data,labels,beta); +elseif (strcmpi(criteria,'mrmr')) + selectedFeatures = FSToolboxMex(2,numToSelect,data,labels); +elseif (strcmpi(criteria,'cmim')) + selectedFeatures = FSToolboxMex(3,numToSelect,data,labels); +elseif (strcmpi(criteria,'jmi')) + selectedFeatures = FSToolboxMex(4,numToSelect,data,labels); +elseif (strcmpi(criteria,'disr')) + selectedFeatures = FSToolboxMex(5,numToSelect,data,labels); +elseif ((strcmpi(criteria,'cife')) || (strcmpi(criteria,'fou'))) + selectedFeatures = FSToolboxMex(6,numToSelect,data,labels); +elseif (strcmpi(criteria,'icap')) + selectedFeatures = FSToolboxMex(7,numToSelect,data,labels); +elseif (strcmpi(criteria,'condred')) + selectedFeatures = FSToolboxMex(8,numToSelect,data,labels); +elseif (strcmpi(criteria,'betagamma')) + if (nargin ~= 6) + error('BetaGamma criteria expects a beta and a gamma'); + else + beta = varargin{1}; + gamma = varargin{2}; + end + selectedFeatures = FSToolboxMex(9,numToSelect,data,labels,beta,gamma); +elseif (strcmpi(criteria,'cmi')) + selectedFeatures = FSToolboxMex(10,numToSelect,data,labels); +elseif (strcmpi(criteria,'fcbf')) + if (nargin == 4) + error('Threshold for FCBF not supplied'); + else + selectedFeatures = FCBF(data,labels,varargin{1}); + end +elseif (strcmpi(criteria,'relief')) + [tmp selectedFeatures] = RELIEF(data,labels); +else + selectedFeatures = []; + disp(['Unrecognised criteria ' criteria]); +end |