diff options
Diffstat (limited to 'FEAST/MIToolbox/demonstration_algorithms/CMIM.m')
-rw-r--r-- | FEAST/MIToolbox/demonstration_algorithms/CMIM.m | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/FEAST/MIToolbox/demonstration_algorithms/CMIM.m b/FEAST/MIToolbox/demonstration_algorithms/CMIM.m new file mode 100644 index 0000000..8ae1f7c --- /dev/null +++ b/FEAST/MIToolbox/demonstration_algorithms/CMIM.m @@ -0,0 +1,49 @@ +function selectedFeatures = CMIM(k, featureMatrix, classColumn) +%function selectedFeatures = CMIM(k, featureMatrix, classColumn) +%Computes conditional mutual information maximisation algorithm from +%"Fast Binary Feature Selection with Conditional Mutual Information" +%by F. Fleuret (2004) + +%Computes the top k features from +%a dataset featureMatrix with n training examples and m features +%with the classes held in classColumn. + +noOfTraining = size(classColumn,1); +noOfFeatures = size(featureMatrix,2); + +partialScore = zeros(noOfFeatures,1); +m = zeros(noOfFeatures,1); +score = 0; +answerFeatures = zeros(k,1); +highestMI = 0; +highestMICounter = 0; + +for n = 1 : noOfFeatures + partialScore(n) = mi(featureMatrix(:,n),classColumn); + if partialScore(n) > highestMI + highestMI = partialScore(n); + highestMICounter = n; + end +end + +answerFeatures(1) = highestMICounter; + +for i = 2 : k + score = 0; + limitI = i - 1; + for n = 1 : noOfFeatures + while ((partialScore(n) >= score) && (m(n) < limitI)) + m(n) = m(n) + 1; + conditionalInfo = cmi(featureMatrix(:,n),classColumn,featureMatrix(:,answerFeatures(m(n)))); + if partialScore(n) > conditionalInfo + partialScore(n) = conditionalInfo; + end + end + if partialScore(n) >= score + score = partialScore(n); + answerFeatures(i) = n; + end + end +end + +selectedFeatures = answerFeatures; |