通过源码学算法--AdaBoost (CART): RealAdaBoost.m + tree_node_w.m
2013-03-30 09:15
453 查看
tree_node_w.m
代表分类树的类结构。很简单,只有5个成员如果是左树则只有right_constraint有值,如果是右树则只有left_constraint有值
实际上在这里是一个类多用了。
比如一个训练好的最大深度为3(max_split == 3)的CART 树有四个节点(node),每个节点就是该类tree_node_w的一个object,同时每个节点又是一个弱分类器 (weak classifier)
如果循环训练100次(Max_Iter == 100),就有100棵CART树,即400个弱分类器。每个分类器都有对应的权重
function tree_node = tree_node_w(max_split) tree_node.left_constrain = []; tree_node.right_constrain = []; tree_node.dim = []; tree_node.max_split = max_split; tree_node.parent = []; tree_node = class(tree_node, 'tree_node_w') ;
RealAdaBoost.m
权重分布初始化Learners = {}; Weights = []; distr = ones(1, length(Data)) / length(Data); final_hyp = zeros(1, length(Data));
循环训练100次
每次得到一个4节点的CART树(也就是4个弱分类器)
第一个节点是root,没有parent。其他3个节点都有parent,最终指回root
用每个弱分类器对训练数据分类,根据公式计算/调整alpha值
根据该CART树的最终分类结果调整权重分布distr
归一化权重分布
for It = 1 : Max_Iter nodes = train(WeakLrn, Data, Labels, distr); for i = 1:length(nodes) curr_tr = nodes{i}; step_out = calc_output(curr_tr, Data); s1 = sum( (Labels == 1) .* (step_out) .* distr); s2 = sum( (Labels == -1) .* (step_out) .* distr); if(s1 == 0 && s2 == 0) continue; end Alpha = 0.5*log((s1 + eps) / (s2+eps)); Weights(end+1) = Alpha; Learners{end+1} = curr_tr; final_hyp = final_hyp + step_out .* Alpha; end distr = exp(- 1 * (Labels .* final_hyp)); Z = sum(distr); distr = distr / Z; end
相关文章推荐
- 通过源码学算法--AdaBoost (CART) -- do_learn_nu.m
- 通过源码学算法--AdaBoost: CART插播
- 通过源码学算法--AdaBoost (CART) -- 楔子
- 通过源码学算法--AdaBoost (CART) -- Example_1.m
- 通过源码学算法--AdaBoost (CART) -- train.m
- 机器学习中的算法:决策树模型组合之GBDT(Gradient Boost Decision Tree)
- 第四篇:Spark SQL Catalyst源码分析之TreeNode Library
- Spark SQL Catalyst源码分析之TreeNode Library
- CART分类与回归树与GBDT(Gradient Boost Decision Tree)
- CART(Classification And Regression Tree)算法原理详解
- Gradient Tree Boosting (GBM, GBRT, GBDT, MART)算法解析和基于XGBoost/Scikit-learn的实现
- Weka算法Classifier-tree-J48源码分析(一)算法和基本数据结构
- 机器学习中的算法:决策树模型组合之GBDT(Gradient Boost Decision Tree)
- Weka算法Classifier-trees-REPTree源码分析(一)
- 在ICCAVR中通过使用库函数来避免直接看到敏感算法源码
- CentOS7通过源码编译安装官方最新版Node
- ExtJS Tree利用json(直接传List TreeNode,不需要转化为JSONArray或通过JSP传)在Struts 2实现Ajax动态加载树结点
- android 股票数据通过日K获取周K的数据 算法 源码
- CART分类与回归树与GBDT(Gradient Boost Decision Tree)
- mac通过tree源码编译安装tree