专栏首页决胜机器学习机器学习(二十五) ——adaboost算法与实现

机器学习(二十五) ——adaboost算法与实现

机器学习(二十五)——adaboost算法与实现

(原创内容,转载请注明来源,谢谢)

一、概述

当进行监督学习时,除了使用某个分类器外,还可以将各个分类器结合起来使用,或者多次使用某个分类器,也可以是数据集分给不同的分类器后进行集成。本文主要介绍基于同一种分类器多个不同实例的方法,基础算法基于单层决策树。

二、bagging

首先,先介绍bagging算法,这个算法是一种自举汇聚法,方法如下:

1)获取数据源

假设样本容量为m,则进行m次放回抽样(即每次抽到样本后再将样本放回),获取一个新的样本集,这个样本集可能用重复数据。

接着,进行S次上述操作,获取S个样本集。

2)分类器

把某种分类器(如决策树)作用于这S个样本集,得到S个分类器。

3)使用

当需要分类的时候,则把新的数据给这S个分类器进行分类,会得到S个分类结果,并返回这S个分类结果中出现次数最多的分类(又称为票数最多的分类结果)。

三、boosting

boosting和bagging非常类似,唯一的区别在于,bagging中,每个分类器的投票权重是一样的,而boosting则会根据上一次的分类结果,对下一次的分类调整分类器对不同样本的权重。

boosting集中关注被已有分类器错分的那些数据,并主要用这些数据来训练新的分类器。多种boosting版本中,最流行的就是adaboosting。

主要步骤如下:

1)权重

对于训练数据的每个样本,赋予一个权重,这个权重代表上一轮迭代的成功度,上一轮成功的降低权重,上一轮错误的增加权重。

2)在训练数据上训练一个弱分类器,并计算该分类器的错误率,然后在同一数据集上再次训练弱分类器。

3)在分类器的二次训练中,会重新调整每个样本的权重。

4)公式

错误率e=未正确分类样本数/所有样本数,α=0.5ln((1-e)/e)。

上一轮该样本正确分类,则该轮样本Di(t+1)=Di(t)e-α/sum(D);若错误分类,则Di(t+1)=Di(t)eα/sum(D)。

四、python实现adaboost

1、获取数据

这里有两种方式,一个是固定一个数据集,用于小范围的测试;另一个是载入一个文件,从文件中获取样本和分类结果。

2、构建单层决策生成树

1)阈值比较

首先需要一个辅助函数,可以通过比较阈值,来进行预测,这里预测的分类结果不是0和1,而是-1和1。

2)构建树

这里通过三层的循环,来构建一个单层的最佳的树,第一层是遍历所有特征,第二层是遍历所有样本,第三层是遍历大于和小于。

对照之前的决策树,是通过信息熵的大小来确定选择哪个节点最好,而这里不考虑信息熵,而是通过选择单层决策树的错误率,错误率最低的作为最佳的决策树,返回构建决策树的样本的第i个特征值、阈值、大于或是小于、最低错误率、最低错误率情况下的预测分类结果。

3、完整adaboost算法

上面有了构建决策树后,就可以来实现完整的adaboost了。实现方式主要基于上面的公式,如下:

错误率e=未正确分类样本数/所有样本数,α=0.5ln((1-e)/e)。

上一轮该样本正确分类,则该轮样本Di(t+1)=Di(t)e-α/sum(D);若错误分类,则Di(t+1)=Di(t)eα/sum(D)。

整个过程比较简单,代码如下图所示:

唯一不一样的,是α的计算,不是直接除以e,是为了防止e=0时发生除以0的异常。

测试分类结果是否正常的代码如下:

一共迭代10次,实现10层的单层决策树。

结果如下(部分):

可以看到,虽然每次的错误率都在0.5左右,但是最终的错误率在0.35,且这里返回了每层决策树的分类依据、阈值等数据。

4、使用adaboost进行分类

使用过程,即不断的获取单层的树,并且动态的加权后,将结果进行sign的运算即可。

五、总结

adaboost算法,可以理解为一个算法的大合集,里面可以放各种的内容,这里是以单层决策树为例,实际上可以放各种函数,有点类似svm的核函数的意义。

由于每次训练完,有反馈和权重,故多层的叠加后,效果会更好。

——written by linhxx 2018.01.30

本文分享自微信公众号 - 决胜机器学习(phpthinker),作者:linhxx

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-01-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 机器学习(十九) ——K-均值算法理论

    机器学习(十九)——K-均值算法理论 (原创内容,转载请注明来源,谢谢) 一、概述 K均值(K-Means)算法,是一种无监督学习(Unsu...

    用户1327360
  • Redis专题(三) ——Redis事务与过期时间(缓存分析)

    Redis专题(三)——Redis事务与过期时间(缓存分析) (原创内容,转载请注明来源,谢谢) 一、事务(Transaction) 1、概述 事务的定义和...

    用户1327360
  • 机器学习(十四) ——朴素贝叶斯实现分类器

    机器学习(十四)——朴素贝叶斯实现分类器 (原创内容,转载请注明来源,谢谢) 一、概述 朴素贝叶斯,在机器学习中,是另一种思想,属于概率思想。不过其还是在已知...

    用户1327360
  • 监督学习中各算法优缺点及应用场景概览

    记录一波监督学习算法的应用场景和优缺点。 高斯朴素贝叶斯 场景:该模型常用于性别分类(https://en.wikipedia.org/wiki/Naive_B...

    用户1332428
  • 机器学习概念总结笔记(三)

    C4.5 算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。此外,C4....

    serena
  • 简单易学的机器学习算法——基于密度的聚类算法DBSCAN

    一、基于密度的聚类算法的概述     最近在Science上的一篇基于密度的聚类算法《Clustering by fast search and find of...

    zhaozhiyong
  • 【玩转腾讯云】使用Serverless+飞书打造你的个性化消息提醒系统

    如果每件事都花时间去关注,那我们的时间必然会不够用,那有没有什么办法可以让这些消息集中起来并且及时推送呢?在这里我想向大家推荐一个解决方案,那就是使用Serve...

    用户1358150
  • 用Python实现SVM多分类器

    支持向量机(SVM)——分类预测,包括多分类问题,核函数调参,不平衡数据问题,特征降维,网格搜索,管道机制,学习曲线,混淆矩阵,AUC曲线等

    大数据技术与机器学习
  • 机器学习系列(六)Adaboost

    机器学习系列(六)Adaboost 前面我们已经介绍了几种不同的分类器,每种分类器都各有优缺点,我们可以借助集成学习的方法将不同的分类器组合起来,将多个弱可学习...

    Minerva
  • 网站性能优化实战——从12.67s到1.06s的故事

    Java高级架构

扫码关注云+社区

领取腾讯云代金券