【模式识别】CART和GML AdaBoost MATLAB TOOLBOX
AdaBoost的训练和分类的结构都是类似的,能够參考前一篇《Boosting》。仅仅简单介绍一下GML。GML内部弱分类器使用的CART决策树。决策树的叶子表示决策,内部每一个分支都是决策过程。
从根部開始,每一个决策结果指向下一层决策,最后到达叶子,得到终于的决策结果。一个比較简单的示意例如以下图所看到的:
对于特征{x1,x2,x3}值为{4,-1,2}的样本,上图决策树的终于决策为y=-1,而对于{3,-2,3}的样本预測值为+1。
工具箱中CART根的构造算法例如以下:
1. 对于n为特征的每一个维度,分别找到阈值使得分类错误率最小
2. 选择错误率最小的第i维构造根节点:
a) 预測xi>Θ
b) 分别构造true/false子树分支。各自的分类结果作为叶子
在树中移动并终于到达叶子,我们把得到的预測结果错误分类一个样本的概率作为“树叶的错误率”。
整颗决策树的构造使用例如以下规则:
1. 构造根节点
2. 选择错误率最小的叶子
3. 仅适用于和所选叶子相关的训练数据构造节点
4. 使用构造的节点取代所选的叶子
5. 反复2-4步直到全部的叶子错误率为0,或者到达循环结束的循环次数。
其实,工具箱使用中,CART树的构造过程仅仅有树深一个可调參数,使用:
function tree_node = tree_node_w(max_splits)
函数初始化最大树深,之后就是将构造的弱分类器传给对应的AdaBoost函数。以下是一个使用演示样例:
% Step1: reading Data from the file
clear
clc
file_data = load('Ionosphere.txt');
Data = file_data(:,1:10)';
Labels = file_data(:,end)';
Labels = Labels*2 - 1;
MaxIter = 200; % boosting iterations
% Step2: splitting data to training and control set
TrainData = Data(:,1:2:end);
TrainLabels = Labels(1:2:end);
ControlData = Data(:,2:2:end);
ControlLabels = Labels(2:2:end);
% Step3: constructing weak learner
weak_learner = tree_node_w(3); % pass the number of tree splits to the constructor
% Step4: training with Gentle AdaBoost
[GLearners GWeights] = GentleAdaBoost(weak_learner, TrainData, TrainLabels, MaxIter);
% Step5: training with Modest AdaBoost
[MLearners MWeights] = ModestAdaBoost(weak_learner, TrainData, TrainLabels, MaxIter);
% Step5: training with Modest AdaBoost
[RLearners RWeights] = RealAdaBoost(weak_learner, TrainData, TrainLabels, MaxIter);
% Step6: evaluating on control set
ResultG = sign(Classify(GLearners, GWeights, ControlData));
ResultM = sign(Classify(MLearners, MWeights, ControlData));
ResultR = sign(Classify(RLearners, RWeights, ControlData));
% Step7: calculating error
ErrorG = sum(ControlLabels ~= ResultG) / length(ControlLabels)
ErrorM = sum(ControlLabels ~= ResultM) / length(ControlLabels)
ErrorR = sum(ControlLabels ~= ResultR) / length(ControlLabels)
以上代码构造深度为3的CART决策树作为弱分类器。分别使用GentleAdaBoost,ModestAdaBoost和RealAdaBoost迭代200次训练AdaBoost分类器。
以上代码直接使用MaxIter调用函数训练与以下方法是等价的:
% Step4: iterativly running the training
for lrn_num = 1 : MaxIter
clc;
disp(strcat('Boosting step: ', num2str(lrn_num),'/', num2str(MaxIter)));
%training gentle adaboost
[GLearners GWeights] = GentleAdaBoost(weak_learner, TrainData, TrainLabels, 1, GWeights, GLearners);
%evaluating control error
GControl = sign(Classify(GLearners, GWeights, ControlData));
GAB_control_error(lrn_num) = GAB_control_error(lrn_num) + sum(GControl ~= ControlLabels) / length(ControlLabels);
%training real adaboost
[RLearners RWeights] = RealAdaBoost(weak_learner, TrainData, TrainLabels, 1, RWeights, RLearners);
%evaluating control error
RControl = sign(Classify(RLearners, RWeights, ControlData));
RAB_control_error(lrn_num) = RAB_control_error(lrn_num) + sum(RControl ~= ControlLabels) / length(ControlLabels);
%training modest adaboost
[NuLearners NuWeights] = ModestAdaBoost(weak_learner, TrainData, TrainLabels, 1, NuWeights, NuLearners);
%evaluating control error
NuControl = sign(Classify(NuLearners, NuWeights, ControlData));
MAB_control_error(lrn_num) = MAB_control_error(lrn_num) + sum(NuControl ~= ControlLabels) / length(ControlLabels);
end
可是第二段代码每次显示使用了上一次的训练结果,实际执行速度更快。
(转载请注明作者和出处:http://blog.csdn.net/xiaowei_cqu 未经同意请勿用于商业用途)
【模式识别】CART和GML AdaBoost MATLAB TOOLBOX的更多相关文章
- 几个模式识别和计算机视觉相关的Matlab工具箱
模式识别.计算机视觉.图像处理等领域大部分是对一些图像等数据的处理,比较常用的语言是C++和Matlab,相应也对应很多库,象opencv等,都是很好用功能也很强大,但是对于数据处理更方便的应该还是M ...
- MATLAB Toolbox Path Cache is out of date and is not being used的解决
作者:朱金灿 来源:http://blog.csdn.net/clever101 使用mcc编译MATLAB\R2009a\extern\examples\compiler目录下的hello.m,编译 ...
- matlab 工具函数、matlab toolbox(工具箱)
minimize.m:最小化可微多元函数 minimize.m:最小化一个可微的多元函数: Minimize a differentiable multivariate function,函数接口说明 ...
- Mike post process with Matlab toolbox
表怕,这个博客只有题目是英文的-- Matlab toolbox 安装 去DHI官网下载最新的MikeSDK2014与Matlab toolbox,下载好后安装MikeSDK2014,注意电脑上不能有 ...
- 可视化利器 —— t-SNE(matlab toolbox 的使用与解释)
t-SNE – Laurens van der Maaten(感谢学术男神们的无私开源) User_guide.pdf(用户指南) 1. tsne 函数 mappedX = tsne(X, label ...
- 【模式识别】Boosting
Boosting简单介绍 分类中通常使用将多个弱分类器组合成强分类器进行分类的方法,统称为集成分类方法(Ensemble Method).比較简单的如在Boosting之前出现Bagging的方法,首 ...
- 混淆矩阵在Matlab中PRtools模式识别工具箱的应用
声明:本文用到的代码均来自于PRTools(http://www.prtools.org)模式识别工具箱,并以matlab软件进行实验. 混淆矩阵是模式识别中的常用工具,在PRTools工具箱中有直接 ...
- Matlab Robotics Toolbox 仿真计算:Kinematics, Dynamics, Trajectory Generation
1. 理论知识 理论知识请参考: 机器人学导论++(原书第3版)_(美)HLHN+J.CRAIG著++贠超等译 机器人学课程讲义(丁烨) 机器人学课程讲义(赵言正) 2. Matlab Robotic ...
- matlab中文论坛视频谷普教程MATLAB压缩包介绍
matlab中文论坛视频谷普教程MATLAB压缩包介绍 我也正在学习这个软件 ,看到这个教程就在这里分享了,希望大家喜欢!Matlab 初学者视频教学1. Matlab视频:Matlab中文论坛为新手 ...
随机推荐
- ANT使用 - 用for和foreach的方法遍历一个文件夹,查找到某个文件并删除
转自:http://www.cnblogs.com/QAZLIU/p/3732329.html?utm_source=tuicool&utm_medium=referral build.xml ...
- python中MySQLdb模块用法实例
篇文章主要介绍了python中MySQLdb模块用法,以实例形式详细讲述了MySQLdb模块针对MySQL数据库的各种常见操作方法,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了python中 ...
- iptables firewall-cmd
iptables -F iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A IN ...
- 标准库Allocator(三)uninitialized_fill等函数的实现
前面我们使用了uninitialized_fill,来批量初始化某一段内存. 下面提供三个函数的实现代码,这三个代码的共同点是: 1.遇到错误,抛出异常 2.出现异常时,把之前构造的对象全部销毁 所以 ...
- ping百度不通的解决方案
1.ping www.baidu.com unknow baidu.com 第一步,确定是否能ping通网关 第二步,确定是否能直接ping通外网 如ping 8.8.8.8 第三步,如果上面两个都 ...
- discuz !NT 3.5 论坛整合 .net 网站用户登录,退出
using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlCont ...
- yarn-1.12.3.msi 下载地址 百度网盘
yarn-1.12.3.msi 下载地址 百度网盘 链接:https://pan.baidu.com/s/1-JEO1as0Jtp1a1pAqW-mzg 提取码:lbz0
- double check 解决单例模式的多线程并发问题
最近被多线程问题(multi-thread issue)弄昏了头.以前虽然也知道系统里要考虑多线程问题,也无数次见到double-check的代码,但是由于自己碰到这方面的问题基本上就是从其他地方 ...
- hadoop System times on machines may be out of sync. Check system time and time zones.
之前环境一直好好的,由于玩坏了一个mini3只能复制一个了,但是复制之后就出现这个问题了 解决办法是 设置xshell向每一个窗口发消息http://mofansheng.blog.51cto.com ...
- log4j日志异步化大幅提升系统性能
.log4j已成为大型系统必不可少的一部分,log4j可以很方便的帮助我们在程序的任何位置输出所要打印的信息,便于我们对系统在调试阶段和正式运行阶段对问题分析和定位.由于日志级别的不同,对系统的性能影 ...