以下为我自己修改的alpha剪枝法的函数
% Find children of these branches and remove them以下是从内置函数prune里copy过来的
function Tree=prunex(Tree,alpha)
branches= find(Tree.alpha<=alpha) ;
%PRUNENODES Prune selected branch nodes from tree.
N = length(Tree.node);
% Find children of these branches and remove them
parents = branches;
tokeep = true(N,1);
kids = [];
while(true)
newkids = Tree.children(parents);
newkids = newkids(:);
newkids = newkids(newkids>0 & ~ismember(newkids,kids));
if isempty(newkids), break; end
kids = [kids; newkids];
tokeep(newkids) = false;
parents = newkids;
end
% Convert branches to leaves by removing split rule and children
Tree.var(branches) = 0;
Tree.cut(branches) = {0};
Tree.children(branches,:) = 0;
% Get new node numbers from old node numbers
ntokeep = sum(tokeep);
nodenums = zeros(N,1);
nodenums(tokeep) = (1:ntokeep)';
% Reduce tree, update node numbers, update child/parent numbers
Tree.parent = Tree.parent(tokeep);
Tree.class = Tree.class(tokeep);
Tree.var = Tree.var(tokeep);
Tree.cut = Tree.cut(tokeep);
Tree.children = Tree.children(tokeep,:);
Tree.nodeprob = Tree.nodeprob(tokeep);
Tree.nodeerr = Tree.nodeerr(tokeep);
Tree.nodesize = Tree.nodesize(tokeep);
Tree.node = (1:ntokeep)';
mask = Tree.parent>0;
Tree.parent(mask) = nodenums(Tree.parent(mask));
mask = Tree.children>0;
Tree.children(mask) = nodenums(Tree.children(mask));
if isequal(Tree.method,'classification')
Tree.classprob = Tree.classprob(tokeep,:);
Tree.classcount= Tree.classcount(tokeep,:);
if ~isempty(Tree.impurity)
Tree.impurity = Tree.impurity(tokeep,:);
end
end
if ~isempty(Tree.surrvar)
Tree.varassoc = Tree.varassoc(tokeep);
Tree.surrvar = Tree.surrvar(tokeep);
Tree.surrcut = Tree.surrcut(tokeep);
Tree.surrflip = Tree.surrflip(tokeep);
isleaf = Tree.var==0;
Tree.varassoc(isleaf) = {[]};
Tree.surrvar(isleaf) = {[]};
Tree.surrcut(isleaf) = {{}};
Tree.surrflip(isleaf) = {[]};
end