肠衣问题matlab决策树,MATLAB实现决策树 内置alpha剪枝法存疑

以下为我自己修改的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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值