Mercurial > hg > sfx-subgrouping
view phase2/rfFeatureSelection.m @ 3:3ff93b42d454
create random forest feature selection function
author | DaveM |
---|---|
date | Thu, 09 Feb 2017 17:54:49 +0000 |
parents | |
children | 7ec9bd8df111 |
line wrap: on
line source
function features = rfFeatureSelection(data, labels, numFeatures, iterMethod, numTrees) %% rfFeatureSelection(data, labels, numFeatures, iterMethod, numTrees) % % % % if(length(labels) ~= size(data,1)) error('labels and data do not match up'); end if(nargin < 2) error('must pass data and labels into function') end if(nargin < 3) numFeatures = 5; end if(nargin < 4) iterMethod = 'onePass'; end if(nargin < 5) numTrees = 200; end options = statset('UseParallel', true); b = TreeBagger(numTrees, data, labels,'OOBVarImp','On',... 'SampleWithReplacement', 'Off','FBoot', 0.632,'Options', options); [FI,I] = sort(b.OOBPermutedVarDeltaError,'descend'); features = I; if(strcmp(iterMethod,'onePass')) disp('cut') features = features(1:numFeatures); elseif(strcmp(iterMethod,'cut10')) disp('cut10') cutSize = max(floor(length(features)/10),1); features = features(1:end-cutSize); data = data(:,I); features = rfFeatureSelection(data, labels, numFeatures, iterMethod, numTrees); elseif(strcmp(iterMethod,'cut5')) disp('cut5') cutSize = max(floor(length(features)/20),1); features = features(1:end-cutSize); data = data(:,I); features = rfFeatureSelection(data, labels, numFeatures, iterMethod, numTrees); end end