第1关:Bagging

  • 任务描述
  • 相关知识
    • 什么是Bagging
    • Bagging方法如何训练与预测
      • 训练
      • 预测
  • 编程要求
  • 测试说明

任务描述

本关任务:补充 python 代码,完成 BaggingClassifier 类中的 fit 和 predict 函数。请不要修改 Begin-End 段之外的代码。

相关知识

为了完成本关任务,你需要掌握:

  • 什么是 Bagging;
  • Bagging 算法如何训练与预测。

什么是Bagging

Bagging 是 Bootstrap Aggregating 的英文缩写,刚接触的童鞋不要误认为 Bagging 是一种算法, Bagging 和 Boosting 都是集成学习中的学习框架,代表着不同的思想。与 Boosting 这种串行集成学习算法不同, Bagging 是并行式集成学习方法。大名鼎鼎的随机森林算法就是在 Bagging 的基础上修改的算法。

Bagging 方法的核心思想就是三个臭皮匠顶个诸葛亮。如果使用 Bagging 解决分类问题,就是将多个分类器的结果整合起来进行投票,选取票数最高的结果作为最终结果。如果使用 Bagging 解决回归问题,就将多个回归器的结果加起来然后求平均,将平均值作为最终结果。

那么 Bagging 方法如此有效呢,举个例子。狼人杀我相信大家都玩过,在天黑之前,村民们都要根据当天所发生的事和别人的发现来投票决定谁可能是狼人。

如果我们将每个村民看成是一个分类器,那么每个村民的任务就是二分类,假设hi​(x)表示第 i 个村民认为 x 是不是狼人( -1 代表不是狼人,1 代表是狼人),f(x)表示 x 真正的身份(是不是狼人),ϵ表示为村民判断错误的错误率。则有P(hi​(x)​=f(x))=ϵ。

根据狼人杀的规则,村民们需要投票决定天黑前谁是狼人,也就是说如果有超过半数的村民投票时猜对了,那么这一轮就猜对了。那么假设现在有T个村民,H(x)表示投票后最终的结果,则有H(x)=sign(∑i=1T​hi​(x))。

现在假设每个村民都是有主见的人,对于谁是狼人都有自己的想法,那么他们的错误率也是相互独立的。那么根据 Hoeffding不等式 可知,H(x)的错误率为:

P(H(x)​=f(x))=k=0∑T/2​CTk​(1−ϵ)kϵT−k≤exp(−21​T(1−2ϵ)2)

根据上式可知,如果 5 个村民,每个村民的错误率为 0.33,那么投票的错误率为 0.749;如果 20 个村民,每个村民的错误率为 0.33,那么投票的错误率为 0.315;如果 50 个村民,每个村民的错误率为 0.33,那么投票的错误率为 0.056;如果 100 个村民,每个村民的错误率为 0.33,那么投票的错误率为 0.003。从结果可以看出,村民的数量越大,那么投票后犯错的错误率就越小。这也是 Bagging 性能强的原因之一。

Bagging方法如何训练与预测

训练

Bagging 在训练时的特点就是随机有放回采样并行

  • 随机有放回采样:假设训练数据集有 m 条样本数据,每次从这 m 条数据中随机取一条数据放入采样集,然后将其返回,让下一次采样有机会仍然能被采样。然后重复 m 次,就能得到拥有 m 条数据的采样集,该采样集作为 Bagging 的众多分类器中的一个作为训练数据集。假设有 T 个分类器(随便什么分类器),那么就重复 T 此随机有放回采样,构建出 T 个采样集分别作为 T 个分类器的训练数据集。

  • 并行:假设有 10 个分类器,在 Boosting 中,1 号分类器训练完成之后才能开始 2 号分类器的训练,而在 Bagging 中,分类器可以同时进行训练,当所有分类器训练完成之后,整个 Bagging 的训练过程就结束了。

    Bagging 训练过程如下图所示:

预测

Bagging 在预测时非常简单,就是投票!比如现在有 5 个分类器,有 3 个分类器认为当前样本属于 A 类,1 个分类器认为属于 B 类,1 个分类器认为属于 C 类,那么 Bagging 的结果会是 A 类(因为 A 类的票数最高)。

Bagging 预测过程如下图所示:

编程要求

在 begin-end 中完成 BaggingClassifier 类中的 fit 和 predict 函数。分类器可使用 sklearn 提供的 DecisionTreeClassifier。要求模型保存在 self.models 中。

fit 函数用于 Bagging 的训练过程,其中:

  • feature :训练集数据,类型为 ndarray;

  • label :训练集标签,类型为 ndarray。

    predict 函数,实现预测功能,并将标签返回,其中:

  • feature :测试集数据,类型为 ndarray 。(PS:feature中有多条数据)

测试说明

只需完成 fit 与 predict 函数即可,程序内部会调用您所完成的 fit 函数构建模型并调用 predict 函数来对数据进行预测。预测的准确率高于 0.9 视为过关。


开始你的任务吧,祝你成功!

import numpy as np
from collections import Counter
from sklearn.tree import DecisionTreeClassifier
class BaggingClassifier():def __init__(self, n_model=10):'''初始化函数'''#分类器的数量,默认为10self.n_model = n_model#用于保存模型的列表,训练好分类器后将对象append进去即可self.models = []def fit(self, feature, label):'''训练模型:param feature: 训练数据集所有特征组成的ndarray:param label:训练数据集中所有标签组成的ndarray:return: None'''#************* Begin ************#for i in range(self.n_model):m = len(feature)index = np.random.choice(m, m)sample_data = feature[index]sample_lable = label[index]model = DecisionTreeClassifier()model = model.fit(sample_data, sample_lable)self.models.append(model)#************* End **************#def predict(self, feature):''':param feature:训练数据集所有特征组成的ndarray:return:预测结果,如np.array([0, 1, 2, 2, 1, 0])'''#************* Begin ************#result = []vote = []for model in self.models:r = model.predict(feature)vote.append(r)vote = np.array(vote)for i in range(len(feature)):v = sorted(Counter(vote[:, i]).items(), key=lambda x: x[1], reverse=True)result.append(v[0][0])return np.array(result)#************* End **************#

Educoder 机器学习之随机森林算法 第1关:Bagging相关推荐

  1. Educoder 机器学习之随机森林算法 第2关:随机森林算法流程

    第2关:随机森林算法流程 任务描述 本关任务:补充 python 代码,完成 RandomForestClassifier 类中的 fit 和 predict 函数.请不要修改 Begin-End 段 ...

  2. Educoder 机器学习之随机森林算法 第3关:手写数字识别

    第3关:手写数字识别 任务描述 相关知识 数据简介 RandomForestClassifier 编程要求 测试说明 任务描述 本关任务:使用 sklearn 中的 RandomForestClass ...

  3. Python机器学习笔记——随机森林算法

    随机森林算法的理论知识 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,但是它在分类和回归上表现出非常惊人的性能,因此,随机森林被誉为&q ...

  4. 机器学习:随机森林算法及其实现

    文章目录 随机森林算法描述: 如何对features进行bootstrap? 算法代码实现: 随机森林算法描述: 如何对features进行bootstrap? 我们需要一个feature_bound ...

  5. 机器学习-集成之随机森林算法原理及实战

    Bagging和随机森林 前言 集成学习是目前机器学习的一大热门方向.简单来说,集成学习就是组合许多弱模型以得到一个预测结果比较好的强模型.对于常见的分类问题就是指采用多个分类器对数据集进行预测,把这 ...

  6. 随机森林的特征 是放回抽样么_机器学习超详细实践攻略(10):随机森林算法详解及小白都能看懂的调参指南...

    一.什么是随机森林 前面我们已经介绍了决策树的基本原理和使用.但是决策树有一个很大的缺陷:因为决策树会非常细致地划分样本,如果决策树分得太多细致,会导致其在训练集上出现过拟合,而如果决策树粗略地划分样 ...

  7. 【机器学习】P25 随机森林算法(2) 实现 “波士顿房价” 预测

    随机森林算法 Random Forest Algorithm 随机森林算法 随机森林算法实现波士顿房价预测 随机森林算法 随机森林(Random Forest)算法 是一种 集成学习(Ensemble ...

  8. python 随机森林调参_Python机器学习实践:随机森林算法训练及调参-附代码

    原标题:Python机器学习实践:随机森林算法训练及调参-附代码 文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | 博客园 作者 | 战争热诚 ...

  9. 随机森林分类算法python代码_Python机器学习笔记:随机森林算法

    随机森林算法的理论知识 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,但是它在分类和回归上表现出非常惊人的性能,因此,随机森林被誉为&q ...

最新文章

  1. MySQL重置root用户密码的方法
  2. 深度优先搜索算法在RPG游戏迷宫中的应用
  3. elasticsearch-5.0.0初见
  4. python有用知识
  5. P4 详解各硬件部分
  6. Linux 高级存储管理
  7. linux中fg jobs ctrl-z bg操作和kill-15、kill-9杀死进程
  8. 论文浅尝 | 提取计数量词丰富知识库
  9. 【NLP】毕设学习笔记(七)前馈神经网络代表者——卷积神经网络无公式理解
  10. 计算机考研考833的院校,太原理工大学
  11. 一个小问题:深度学习模型如何处理大小可变的输入
  12. 压缩感知(Compressed sensing)from wiki
  13. oracle 消除块竞争(hot blocks)
  14. [转]PKM2:优秀的个人知识管理工具
  15. RTX 3090 Ti 正式发布!30系列显卡的封顶之作!
  16. 一加5应用未安装怎么解决_一加手机x安装不了软件下载是什么原因解决方法
  17. 递推算法6——逆推法之存取问题
  18. C语言 主动判别int型出界
  19. 深入浅出Java线程池:理论篇
  20. Label的属性、事件、方法

热门文章

  1. python语言编程入门-Python编程从入门到精通 PDF 下载
  2. 数组添加元素的方法PHP,JavaScript如何给数组添加元素?js数组添加元素的3种方法(代码实例)...
  3. 神经网络怎么解决过拟合,解决神经网络过拟合
  4. window浏览器事件
  5. linux修改torrent文件格式,linux下飞快的BT客户端rtorrent设置:详细解说
  6. 富人狼性穷人羊性商人必读
  7. 甲骨文:有史以来最伟大的 25 个 Java 应用程序【云图智联】
  8. 医院挂号管理系统 前后台 可预约
  9. 分别设计网页访问计数器,会话计数器,访问网站计数器。
  10. Windows版Git在进行git代码的时候出现报错