多分类器组合算法简单的来讲经常使用的有voting,bagging和boosting,当中就效果来说Boosting略占优势,而AdaBoostM1算法又相当于Boosting算法的“经典款”。

Voting思想是使用多分类器进行投票组合。并依照少数服从多数(大多数情况)来决定终于的分类。缺点是少数服从多数的规则往往仅仅能避免达到最差的情况却也非常难达到最少的情况。

Bagging思想是有放回的随机抽样来训练多个分类器,最后使用voting来进行投票决策。经典算法如RandomForest(之前也有博客分析过)。缺点是要求各基分类器同构。而且从精度上来讲Bagging并非一个明显提高精度的算法,而是一个防止过拟合的算法。

Boosting是使用级联训练分类器,使得“下一级”分类器更加重视“上一级”分错的数据。最后把各分类器结果加权组合来进行决策。缺点是须要级联训练因此算法难于并行化。比較经典的算法如AdaBoostM1、GBDT。

一、算法

算法部分简单说一下,并不做具体的形式化描写叙述及相关理论正确性的证明,參考资料来自于wiki

http://zh.wikipedia.org/wiki/AdaBoost

算法过程:

(1)初始化训练集各实例权重为1/k(如果总共k个用例)

(2)for i=1;i <=m ; i++ (如果总共基分类器的个数是m)

(3)将训练集依据权重进行重採样。得到新训练集

(4)依据新训练集训练基分类器i

(5)评測该基分类器准确率r

(6)假设准确率r小于50%。直接退出。训练失败(这里指的是二值分类情况。多值分类类似扩展)

(7)设置基分类器i权重为log2(1-r/r)

(8)w=1-r/r(由于r>0.5,所以w>1)。对于分类错误的实例。原训练集中的权重乘以w(即调高权重)。

(9)归一化训练集权重(缩小一定倍数使和为1)

(10)回到2

能够看到,依据这个算法,第四步训练得到了基分类器,每一个基分类器都会在第七部得到一个权重。最后进行分类预測的时候就依据每一个基分类器的结果进行加权投票得到终于的结果。

二、实现

在分析每一个分类器的时候,我们都从buildClassifier入手,这次也不例外。

public void buildClassifier(Instances data) throws Exception {

    super.buildClassifier(data);//weka里面有个工具是能够从一个分类器以深度拷贝的方式新建一个分类器,而adaboostm1作为一个多分类器的combine,这个深度拷贝必需要拷贝每个基分类器,这个就是在super类中实现的。

    // 看看这个数据是否能用adaboost来分类,从代码来看,仅仅能处理枚举类型,但我觉得这个应该是由基分类器能力决定的。
getCapabilities().testWithFail(data); // 预处理
data = new Instances(data);
data.deleteWithMissingClass(); // 假设仅仅有一个属性列,当然也就是分类本身的属性。这时没法使用不论什么复杂分类方法。就仅仅是用mZero模型,mZero模型简单的返回枚举值中出现最多的值。
if (data.numAttributes() == 1) {
System.err.println(
"Cannot build model (only class attribute present in data!), "
+ "using ZeroR model instead!");
m_ZeroR = new weka.classifiers.rules.ZeroR();
m_ZeroR.buildClassifier(data);
return;
}
else {
m_ZeroR = null;
} m_NumClasses = data.numClasses();
if ((!m_UseResampling) &&
(m_Classifier instanceof WeightedInstancesHandler)) {
buildClassifierWithWeights(data);//假设基分类器本身就是一个权重敏感的分类器,那么就不需要使用重抽样,否则使用重採样方法,常见的权重敏感的分类器的实现有非常多。比方之前介绍过的J48,RandomTree。RandomForest,Bagging等。
} else {
buildClassifierUsingResampling(data);//否则使用重抽样的方法。 }
}

(未完待续)

Weka算法Classifier-meta-AdaBoostM1源代码分析(一)的更多相关文章

  1. OpenStack_Swift源代码分析——Ring的rebalance算法源代码具体分析

    1 Command类中的rebalnace方法 在上篇文章中解说了,创建Ring已经为Ring加入设备.在加入设备后须要对Ring进行平衡,平衡 swift-ring-builder object.b ...

  2. STL源代码分析——STL算法remove删除算法

    前言 因为在前文的<STL算法剖析>中,源代码剖析许多.不方便学习,也不方便以后复习,这里把这些算法进行归类.对他们单独的源代码剖析进行解说.本文介绍的STL算法中的remove删除算法. ...

  3. STL源代码分析——STL算法merge合并算法

    前言 因为在前文的<STL算法剖析>中.源代码剖析许多.不方便学习.也不方便以后复习,这里把这些算法进行归类.对他们单独的源代码剖析进行解说.本文介绍的STL算法中的merge合并算法. ...

  4. STL源代码分析——STL算法sort排序算法

    前言 因为在前文的<STL算法剖析>中,源代码剖析许多,不方便学习,也不方便以后复习.这里把这些算法进行归类,对他们单独的源代码剖析进行解说.本文介绍的STL算法中的sort排序算法,SG ...

  5. 变动性算法源代码分析与使用示例(copy_backward、 transform、 replace_copy_if 等)

    首先回顾前面的文章,我们把for_each 归类为非变动性算法,实际上它也可以算是变动性算法,取决于传入的第三个参数,即函数 指针.如果在函数内对容器元素做了修改,那么就属于变动性算法. 变动性算法源 ...

  6. K-近邻算法的Python实现 : 源代码分析

    网上介绍K-近邻算法的样例非常多.其Python实现版本号基本都是来自于机器学习的入门书籍<机器学习实战>,尽管K-近邻算法本身非常easy,但非常多刚開始学习的人对其Python版本号的 ...

  7. Openck_Swift源代码分析——添加、删除设备时算法详细的实现过程

    1 初始加入设备后.上传Object的详细流程  前几篇博客中,我们讲到环的基本原理即详细的实现过程,加入我们在初始创建Ring是执行例如以下几条命令: •swift-ring-builder obj ...

  8. Weka算法算法翻译(部分)

    目录 Weka算法翻译(部分) 1. 属性选择算法(select attributes) 1.1 属性评估方法 1.2 搜索方法 2. 分类算法 2.1 贝叶斯算法 2.2 Functions 2.3 ...

  9. 机器学习:eclipse中调用weka的Classifier分类器代码Demo

    weka中实现了很多机器学习算法,不管实验室研究或者公司研发,都会或多或少的要使用weka,我的理解是weka是在本地的SparkML,SparkML是分布式的大数据处理机器学习算法,数据量不是很大的 ...

  10. 转:RTMPDump源代码分析

    0: 主要函数调用分析 rtmpdump 是一个用来处理 RTMP 流媒体的开源工具包,支持 rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://. ...

随机推荐

  1. 梦想Android版CAD控件2018.7.26更新

    下载地址: http://www.mxdraw.com/ndetail_109.html 1. 增加所有接口CHM帮助文档 2. 增加得到当前打开文件函数 3. 读写CAD扩展记录接口 4. 读写属性 ...

  2. Mybatis学习总结二

    Mapper动态代理开发方式 实现原理: Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象. Mapper接口开发需 ...

  3. C# Task详解

    1.Task的优势 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便.比如: ◆ ThreadPool不支持线程的取消.完成.失败通知等交互性 ...

  4. 新一代 Linux 文件系统 btrfs 简介

    https://www.ibm.com/developerworks/cn/linux/l-cn-btrfs/ Btrfs 简介 文件系统似乎是内核中比较稳定的部分,多年来,人们一直使用 ext2/3 ...

  5. SAS,SATA普及文档

    目前所能见到的硬盘接口类型主要有IDE.SATA.SCSI.SAS.FC等等. IDE是俗称的并口,SATA是俗称的串口,这两种硬盘是个人电脑和低端服务器常见的硬盘.SCSI是"小型计算机系 ...

  6. 题解 [USACO18DEC]Balance Beam

    被概率冲昏的头脑~~~ 我们先将样例在图上画下来: 会发现,最大收益是: 看出什么了吗? 这不就是凸包吗? 跑一遍凸包就好了呀,这些点中,如果i号点是凸包上的点,那么它的ans就是自己(第二个点),不 ...

  7. 如何使用Dilworth定理

    相关例题:NOIP 1999导弹拦截 遇到这题不会去网上搜Dilworth定理,太难受了,看不懂证明 但是,我知道怎么使用了,管那么多,会用就完事了 学习自这篇文章 -1.为什么我不想学证明这个定理 ...

  8. libevent reference Mannual II--library

    FYI: http://www.wangafu.net/~nickm/libevent-book/TOC.html The Libevent Reference Manual: Preliminari ...

  9. 洛谷——P1273 有线电视网

    P1273 有线电视网 题目大意: 题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树 ...

  10. NOIP 前的垂死挣扎

    计划每天十题吧,可能会一天水题一天难题吧.题目以杂题为主,没有专题可言. 10.11 计划: [x] P2939 [USACO09FEB] 改造路 Revamping Trails [ ] P3601 ...