diff options
Diffstat (limited to 'FEAST/FSToolbox/FCBF.m')
-rw-r--r-- | FEAST/FSToolbox/FCBF.m | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/FEAST/FSToolbox/FCBF.m b/FEAST/FSToolbox/FCBF.m new file mode 100644 index 0000000..dcaf3bf --- /dev/null +++ b/FEAST/FSToolbox/FCBF.m @@ -0,0 +1,58 @@ +function [selectedFeatures] = FCBF(featureMatrix,classColumn,threshold) +%function [selectedFeatures] = FCBF(featureMatrix,classColumn,threshold) +% +%Performs feature selection using the FCBF measure by Yu and Liu 2004. +% +%Instead of selecting a fixed number of features it provides a relevancy threshold and selects all +%features which score above that and are not redundant +% +% The license is in the license.txt provided. + +numFeatures = size(featureMatrix,2); +classScore = zeros(numFeatures,1); + +for i = 1:numFeatures + classScore(i) = SU(featureMatrix(:,i),classColumn); +end + +[classScore indexScore] = sort(classScore,1,'descend'); + +indexScore = indexScore(classScore > threshold); +classScore = classScore(classScore > threshold); + +if ~isempty(indexScore) + curPosition = 1; +else + curPosition = 0; +end + +while curPosition <= length(indexScore) + j = curPosition + 1; + curFeature = indexScore(curPosition); + while j <= length(indexScore) + scoreij = SU(featureMatrix(:,curFeature),featureMatrix(:,indexScore(j))); + if scoreij > classScore(j) + indexScore(j) = []; + classScore(j) = []; + else + j = j + 1; + end + end + curPosition = curPosition + 1; +end + +selectedFeatures = indexScore; + +end + +function [score] = SU(firstVector,secondVector) +%function [score] = SU(firstVector,secondVector) +% +%calculates SU = 2 * (I(X;Y)/(H(X) + H(Y))) + +hX = h(firstVector); +hY = h(secondVector); +iXY = mi(firstVector,secondVector); + +score = (2 * iXY) / (hX + hY); +end |