【模式识别】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中文论坛为新手 ...
随机推荐
- 简单的图片处理servlet
好久没写博客了.近期做了一个比較有趣的商城项目,里面的业务还真的非常复杂,好在做了特殊的处理之后商城也能正常的使用了. 可是没中不足的就是图片目录和项目掺杂在一块,实在有些难以维护.之后找了点资料就搞 ...
- Windows局域网如何进行远程桌面连接
我们以虚拟机为例: 1 确保被控制的计算机允许远程连接 2 确保被控制的计算机有密码(一般人方便,只有一个administrator账号,而且不设密码,开机直接进入的,如果没有密码,将无法进行远程 ...
- Laravel之视图和Blade模板引擎
一.视图 1.视图文件存放在resources/views目录2.视图载入及传参 return view('greeting', ['name' => 'James']); 还可以通过with ...
- shell定期转移日志文件到云盘并定期删除云盘文件
shell 脚本定期处理如下: cat /home/backup/logs_delete.sh #!/bin/bash /bin/find /data/logs/nginx/ -name " ...
- 实际项目中,看 ECharts 和 HighCharts 渲染性能对比,表面看衣装,本质看内功!!!
最近做项目,使用的是echarts显示图表数据,但是数据量比较多的时候,有卡顿的情况.后来同事拿echarts和HighCharts做了对比,仅供大家参考.同时感谢同事做的工作. 一.查询1天的源数据 ...
- sparkstreaming+socket workCount 小案例
Consumer代码 import org.apache.spark.SparkConf import org.apache.spark.streaming.StreamingContext impo ...
- [译]GLUT教程 - 整合代码7
Lighthouse3d.com >> GLUT Tutorial >> Extras >> The Code So Far VII 以下是子窗体的最终版本代码. ...
- jfreechart时序图 demo
import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.io.FileNotFoundExce ...
- spring-test-dbunit的配置和使用
1.数据源配置 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" ...
- 如何简单的实现一个tab页title的动画效果
首先我们来看看实现的效果 tab上的title沉下去的效果 先来看看布局 <?xml version="1.0" encoding="utf-8"?> ...