aboutsummaryrefslogtreecommitdiff
path: root/FEAST/FSToolbox/feast.m
diff options
context:
space:
mode:
Diffstat (limited to 'FEAST/FSToolbox/feast.m')
-rw-r--r--FEAST/FSToolbox/feast.m100
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