【模式识别】CART和GML AdaBoost MATLAB TOOLBOX

GML AdaBoost Matlab Toolbox是一款非常优秀的AdaBoost工具箱,内部实现了Real AdaBoost, Gentle AdaBoost和Modest AdaBoost三种方法。

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

时间: 2024-10-28 23:12:21

【模式识别】CART和GML AdaBoost MATLAB TOOLBOX的相关文章

Mike post process with Matlab toolbox

表怕,这个博客只有题目是英文的…… Matlab toolbox 安装 去DHI官网下载最新的MikeSDK2014与Matlab toolbox,下载好后安装MikeSDK2014,注意电脑上不能有其他版本的Mike软件. 安装成功后进入解压缩后的Matlab toolbox文件夹MatlabDfsUtil内,运行脚本MatlabDfsUtilBuild.bat,若脚本成功运行,则Toolbox安装成功.注意检查SDK安装路径与MatlabDfsUtilBuild.bat中内容是否一致,如默认

模式识别(七):MATLAB实现朴素贝叶斯分类器

本系列文章由云端暮雪编辑,转载请注明出处 http://blog.csdn.net/lyunduanmuxue/article/details/20068781 多谢合作! 今天介绍一种简单高效的分类器--朴素贝叶斯分类器(Naive Bayes Classifier). 相信学过概率论的同学对贝叶斯这个名字应该不会感到陌生,因为在概率论中有一条重要的公式,就是以贝叶斯命名的,这就是"贝叶斯公式": 贝叶斯分类器就是基于这条公式发展起来的,之所以这里还加上了朴素二字,是因为该分类器对各

【模式识别】Boosting

Boosting简单介绍 分类中通常使用将多个弱分类器组合成强分类器进行分类的方法,统称为集成分类方法(Ensemble Method).比較简单的如在Boosting之前出现Bagging的方法,首先从从总体样本集合中抽样採取不同的训练集训练弱分类器,然后使用多个弱分类器进行voting,终于的结果是分类器投票的优胜结果.这样的简单的voting策略通常难以有非常好的效果.直到后来的Boosting方法问世,组合弱分类器的威力才被发挥出来.Boosting意为加强.提升,也就是说将弱分类器提升

Matlab Robotics Toolbox 仿真计算:Kinematics, Dynamics, Trajectory Generation

1. 理论知识 理论知识请参考: 机器人学导论++(原书第3版)_(美)HLHN+J.CRAIG著++贠超等译 机器人学课程讲义(丁烨) 机器人学课程讲义(赵言正) 2. Matlab Robotics Toolbox安装 上官网: http://petercorke.com/wordpress/toolboxes/robotics-toolbox Download RTB-10.3.1 mltbx format (23.2 MB) in MATLAB toolbox format (.mltb

模式识别论坛

模式识别网络资源链接 一.模式识别相关网址及其论坛网址 1.中国模式识别与机器学习论坛 http://bbs.pr-ml.cn 2.振动论坛——人工智能与模式识别 http://www.chinavib.com/forum/forum-108-1.html 3.研学论坛——人工智能与模式识别 http://219.232.49.40/index.php 4.中国图像网——模式识别 http://www.china-image.cn/mssb/index.aspx 5.中国人工智能网 >> 人工

matlab 工具之各种降维方法工具包,下载及使用教程,有PCA, LDA, 等等。。。

最近跑深度学习,提出的feature是4096维的,放到我们的程序里,跑得很慢,很慢.... 于是,一怒之下,就给他降维处理了,但是matlab 自带的什么pca( ), princomp( )函数,搞不清楚怎么用的,表示不大明白,下了一个软件包: 名字:Matlab Toolbox for Dimensionality Reduction 链接:http://lvdmaaten.github.io/drtoolbox/ Currently, the Matlab Toolbox for Dim

Ubantu/Linux下安装Matlab

Ubantu版本:14.04 Matlab版本:2014a 安装Matlab2014a 1.下载好Mathworks.Matlab.R2014a.Unix.rar:http://pan.baidu.com/s/1c0GSxhQ 解压缩至Mathworks.Matlab.R2014a.Unix.iso,再解压缩至Mathworks.Matlab.R2014a.Unix. 也可直接下载Mathworks.Matlab.R2014a.Unix.iso,这样解压缩一次至Mathworks.Matlab.

64位matlab中libsvm的安装

因为windows版的matlab对编译器的识别不好.所以直接在网上下了已经编译好的libsvm文件放入toolbox文件夹就可以用libsvm了 libsvm已编译好的文件下载地址: 猛戳我下载 1.把下载好的文件放入*/matlab/toolbox中 2.在matlab中set path.把"*\Matlab 2013b\toolbox\libsvm-3.18\matlab"加入到path中 over 64位matlab中libsvm的安装,布布扣,bubuko.com

Matlab实用技巧

1  Matlab Cell 编程模式 在一个长长的脚本m文件中,可能需要对其中的一段反复修改,查看执行效果,这时,cell模式就非常有用了.cell模式相当于将其中的代码拷贝到命令窗口中运行.两个%后接一个空格(%% )开始一个cell.将输入光标放到一个cell中时,背景将变为浅黄色,Ctrl+Enter执行cell中的代码.     执行cell中代码时不需要保存m文件,该m文件可以不在路径列表中.     cell模式中,断点不起作用,当然,调用的子程序中的断点还是正常的. 2 Matl