文档章节

Weka开发[14]-AdaBoost源代码介绍

pior
 pior
发布于 2015/10/20 20:28
字数 686
阅读 138
收藏 1
点赞 0
评论 0

这一次讲的是Ensemble的东西,一位读者希望我讲一下Adaboost的内容,这种Ensemble看起来的确比较吓人,推荐一篇论文:Ensemble Based Systems in Decision Making. 在这里所有理论的东西我就不介绍了。

与以往一样,先看buildClassifier函数(我在函数中将不重要的代码全部去掉):

super.buildClassifier(data);

if ((!m_UseResampling)&& (m_Classifier instanceof WeightedInstancesHandler)) {

       buildClassifierWithWeights(data);

} else {

       buildClassifierUsingResampling(data);

}

Adaboost类继承自RandomizableIteratedSingleClassifierEnhancer类,再看一下这个类的buildClasssifier函数内容:

m_Classifiers = Classifier.makeCopies(m_Classifier, m_NumIterations);

这句话是产生m_NumIterations个基分类器。

接下来的是判断是否用Resampling方法,这个先不讲,直接看下面的函数,先讲buildClassifierWithWeights这个函数,代码太长了,我分开讲:

// Select instances to train the classifier on

if (m_WeightThreshold < 100) {

       trainData = selectWeightQuantile(training,(double) m_WeightThreshold / 100);

} else {

        trainData = new Instances(training, 0, numInstances);

}

最上面那个循环m_Classifiers.length次的循环没有粘,这一段话也没什么意思,就是说先多少样本训练,默认的是100,不是100的时候用selectWeightQuantile函数,这个函数是根据样本权重的比例来选择的,它先根据权重对样本进行排序,再选择样本。如果是默认值,那么当然是选择全部样本。

// Build the classifier

if (m_Classifiers[m_NumIterationsPerformed] instanceof Randomizable)

        ((Randomizable) m_Classifiers[m_NumIterationsPerformed])

              .setSeed(randomInstance.nextInt());

m_Classifiers[m_NumIterationsPerformed].buildClassifier(trainData);

    有的分类器是一个Randomizable实例,那么就给它设置种子,然后训练一个分类器。

    // Evaluate the classifier

    evaluation = new Evaluation(data);        

    evaluation.evaluateModel(m_Classifiers[m_NumIterationsPerformed],training);

    epsilon = evaluation.errorRate();

 

    // Stop if error too small or error too big and ignore this model

    if (Utils.grOrEq(epsilon, 0.5) || Utils.eq(epsilon, 0)) {

       if (m_NumIterationsPerformed == 0) {

           // If we're the first we have to to use it

           m_NumIterationsPerformed = 1;

        }

       break;

    }

    这一段,看过论文的人应该比较清楚是什么意思,这里也就不解释了。

    // Determine the weight to assign to this model

    m_Betas[m_NumIterationsPerformed] = Math.log((1 - epsilon)/ epsilon);

    reweight = (1 - epsilon) / epsilon;

 

    // Update instance weights

    setWeights(training, reweight);

    第一行代码对应我刚才讲的论文的图5中的公式15,第二句对应公式13,最后一句对应公式14,下面详细讲一下:

    oldSumOfWeights = training.sumOfWeights();

    Enumeration enu = training.enumerateInstances();

    while (enu.hasMoreElements()) {

       Instance instance = (Instance) enu.nextElement();

       if (!Utils.eq(m_Classifiers[m_NumIterationsPerformed].

           classifyInstance(instance), instance.classValue()))

           instance.setWeight(instance.weight() * reweight);

    }

 

    // Renormalize weights

    newSumOfWeights = training.sumOfWeights();

    enu = training.enumerateInstances();

    while (enu.hasMoreElements()) {

       Instance instance = (Instance) enu.nextElement();

       instance.setWeight(instance.weight() * oldSumOfWeights / newSumOfWeights);

    }

这段代码也是adaboost的核心了,这个函数就是重新计算每个样本的权重,第一个if是判断是否分类错误,如果分类错误,就在原来的权重上乘上reweight(这地方我还有点不清楚,原论文上应该是分类正确了乘上reweight,公式14)。

底下的那部分代码就是重新归一化权重,没什么特别的。至于另一个函数buildClassifierUsingResampling,想想还是不讲了,与这个函数比较也没什么特别的地方。


本文转载自:

共有 人打赏支持
pior
粉丝 25
博文 151
码字总数 22496
作品 0
济南
高级程序员
Weka 中的算法名说明

数据输入和输出 WOW():查看Weka函数的参数。 Weka_control():设置Weka函数的参数。 read.arff():读Weka Attribute-Relation File Format (ARFF)格式的数据。 write.arff:将数据写入Weka ...

pior
2015/10/17
304
0
Weka manual 3.6翻译: 1.1 简介

第一章 Weka命令行入门 1.1简介 在最初的实验,Weka所包含的图形用户界面是相当足够,若深入使用则建议使用命令行界面,因为它提供了一些功能(这些功能在图形用户界面下不可用) - 并使用少...

Honghe
2012/11/24
0
0
Weka开发[5]-半监督算法

这次介绍一个我现在正在做的半监督算法,因为我只是提出一个框架,半监督算法只是一个工具,可是为了找这个工具也让我花了不少功夫。现在介绍的暂时不是Weka的一部分,但开发者是waikato大学...

pior
2015/10/17
46
0
Weka 开发[1]-Instances类

言归正传,开始介绍Weka,先google一下,把Weka软件下载下来,在Weka的目录中有一个weka.jar的包。 把包添加到工程中后,就可以调用weka中的函数了。 再介绍一点weka的基本知识,在weka的目录...

pior
2015/10/17
217
0
Weka开发[6]-参数设置

这一次介绍的非常简单,会用传命令行参数的人就不用浪费时间看这一篇了,这一篇介绍weka中一些类参数传递的问题。 首先要传递参数当然要知道参数有哪些,有什么作用,要知道这些,建议用Wek...

pior
2015/10/17
79
0
数据挖掘十大经典算法概述、优势及使用场景

国际权威的学术组织theIEEEInternationalConferenceonDataMining(ICDM)2006年12月评选出了数据挖掘领域的十大经典算法:C4.5,k-Means,SVM,Apriori,EM,PageRank,AdaBoost,kNN,NaiveBayes,andC......

加米谷
06/14
0
0
机器学习之集成学习之adaboost

Adaboost算法原理分析和实例+代码(简明易懂) 【尊重原创,转载请注明出处】 http://blog.csdn.net/guyuealian/article/details/70995333 本人最初了解AdaBoost算法着实是花了几天时间,才明...

qq_37634812
2017/11/30
0
0
数据预处理和weka.filters的使用--数据挖掘学习和weka使用(三)

上一篇介绍了arff格式,这是weka专有格式,一般情况需要我们从其他数据源抽取或者获得。weka支持从cvs转化,也可以从数据库中抽取,界面如下图 weka安装目录有一个data目录,里面有一些测试数...

长平狐
2013/11/25
1K
0
从零开始学习weka数据挖掘

作为一个免费、公开、开源的数据挖掘工作平台,Weka集合了大量能承担数据挖掘任务的机器学习算法,包括预处理、分类、回归、聚类、关联规则以及在新的交互式界面上的可视化操作等;目前,Wek...

huangbo929
2017/07/28
0
0
25 个 Java 机器学习工具和库

本列表总结了25个Java机器学习工具&库: 1. Weka集成了数据挖掘工作的机器学习算法。这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用。Weka包括一系列的工具,如数据预处理...

oschina
2015/12/28
10.9K
11

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式 Factory工厂模式 Singleton单例模式 Delegate委派模式 Strategy策略模式 Prototype原型模式 Template模板模式 Spring5 beans 接口实例化 代理Bean操作 ...

小致dad
3分钟前
0
0
SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
9
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
9
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
198
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部