1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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
|