更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html

Bagging算法和随机森林

集成学习主要分成两个流派,其中一个是Boosting算法,另一个则是本文要讲的Bagging算法,Bagging算法

算法的弱学习器是没有依赖关系的,因此弱学习之间可以并行拟合。

Bagging算法中最著名的算法是随机森林,由于随机森林的不容易过拟合性以及简便性,可以说是和梯度提升树同名的算法。

一、Bagging算法和随机森林学习目标

  1. Bagging算法原理
  2. Bagging算法流程
  3. 随机森林和Bagging算法区别
  4. 随机森林流程

二、Bagging算法原理回顾

Bagging算法的弱学习器的训练集是通过随机采样得到的。通过\(T\)次的随机采样,我们可以通过自主采样法(bootstrap sampling)得到\(T\)个采样集,然后对于这\(T\)个采样集独立的训练出\(T\)个弱学习器,之后我们通过某种结合策略将这\(T\)个弱学习器构造成一个强学习器。

在一个有\(m\)个样本的训练数据中随机采样,一个样本每次被采样的概率为\({\frac{1}{m}}\),不被采集的概率为\(1-{\frac{1}{m}}\),如果\(m\)次采样都没有采中的概率为\((1-{\frac{1}{m}})^m\),当\(m\rightarrow{\infty}\),\((1-{\frac{1}{m}})^m\rightarrow{\frac{1}{e}}\approx0.368\),即在Bagging算法的随机采样中,大约有\(36.8%\)的数据没有被采中。

Bagging算法的结合策略,对于分类问题,一般使用相对多数投票法,即票数最多的类别即为样本预测类别;对于回归问题,一般使用简单平均法,即对\(T\)个弱学习的输出做算术平均得到样本预测值。

三、Bagging算法流程

3.1 输入

\(m\)个样本\(n\)个特征的训练数据集\(D=\{(x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\}\);弱学习器迭代次数为\(T\)。

3.2 输出

最终强学习器\(f(x)\)。

3.3 流程

  1. 对训练集进行第\(t\quad(t=1,2,\cdots,T)\)次随机采样,共采集\(m\)次,得到有\(m\)个样本的采样集\(D_t\)
  2. 用采样集\(D_t\)训练第\(t\)个弱学习器\(G_t(x)\)
  3. 对于分类问题,使用相对多数投票法预测分类结果;对于回归问题,使用简单平均法得到预测值

四、随机森林详解

4.1 随机森林和Bagging算法区别

随机森林(random forest,RF)基于Bagging算法的思想,做了一定的改进,即对特征进行了选择。

RF使用CART决策树作为弱学习器,但是RF对普通的CART决策树做了改进,普通的CART树选择最优特征作为决策树划分的条件;RF的CART决策树则是在训练数据的\(n\)个特征中随机选择\(n_{sub}\)特征,一般情况下\(n_{sub}<n\),然后在这\(n_{sub}\)个特征中选择最优特征作为决策树划分的条件。

如果\(n_{sub}=n\),则RF的决策树为普通的决策树;\(n_{sub}\)越小,则模型鲁棒性越好,模型方差也会减小,但模型对训练集的拟合程度会变差,反之,模型的偏差会变小,模型对训练集的泛化能力会变差。

五、随机森林拓展

RF在实际应用中不仅能解决分类和回归问题,还可以用于特征转换、异常点检测等。

5.1 Extra Trees

Extra Trees和RF的区别有以下两点:

  1. 对于每个决策树的训练集,RF采用的随机采样集;对于extra trees,每个决策树采用原始数据集
  2. RF会基于基尼系数、信息熵的方式,选择一个最优的特征值划分;extra teees则会随机选择一个特征值划分特征数

以上两点导致extra trees生成的随机森林的决策树规模一般会大于RF。即可以一定程度的减小模型的方差,增强模型的泛化能力。

# 使用ExtraTree判断特征重要性程度
from sklearn.datasets import make_friedman1
from sklearn.ensemble import ExtraTreesRegressor X, y = make_friedman1(n_samples=100, n_features=10, random_state=0) # 通过ExtraTreesRegressor模型获取每个特征的重要性
et = ExtraTreesRegressor(n_estimators=10)
et = et.fit(X, y)
print('10个特征各自的重要性:{}'.format(et.feature_importances_))
10个特征各自的重要性:[0.11488041 0.12557425 0.08477273 0.45483849 0.09753123 0.01384401
0.0364967 0.0256125 0.01965904 0.02679065]

5.2 Totally Random Trees Embedding

Totally Random Trees Embedding(TRTE)是一种无监督学习的数据转换方式,它可以将低维的数据集映射到高维,在支持向量机中使用了核技巧将低维的数据映射到高维,TRTE提供了不同于核技巧的方法。

TRTE首先会构成一个类似RF的随机森林模型,模型定下来后模型中\(T\)个决策树的叶子节点位置也会被确定。

现在假设我们有3棵决策树,每个决策树有4个叶子节点,某个数据特征\(x\)划分到第1个决策树的第1个叶子节点,第2棵决策树的第2个节点,第3棵决策树的第4个节点,则\(x\)映射后的特征编码为\((1,0,0,0\quad0,1,0,0\quad0,0,0,1)\),由此既可以得到12维的高维特征。

5.3 Isolation Forest

Isolation Forest(IForest)可以检测异常点。

IForest类似于RF,但在随机采样的时候,IForest随机采样的数量并不是\(m\)个,而是远远小于训练集个数,因为IForest的作用是检测异常点,如果采样过多正确样本会掩盖掉异常点。

在划分特征的时候,IForest对划分特征随机选择一个划分阈值,并随机选择一个特征划分决策树。

由于IForest的样本数过少,IForest也会选择一个较小的最大决策树深度控制决策树的深度。

将测试样本\(x\)拟合到\(T\)棵决策树,计算每颗决策树上该样本的叶子节点的深度\(h_t(x)\),从而计算出平均高度,则样本点\(x\)的异常概率为

\[s(x,m) = 2^{-{\frac{h(x)}{c(m)}}}
\]

其中\(m\)为样本个数,\(c(m)\)的表达式为

\[c(m) = 2\ln(m-1)+\xi-2{\frac{m-1}{m}}
\]

其中\(\xi\)为欧拉常数,\(s(x,m)\)的取值范围是\([0,1]\),取值越接近1,测试样本点是异常点的概率越大。

六、随机森林流程

6.1 输入

\(m\)个样本\(n\)个特征的训练数据集\(D=\{(x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\}\);弱学习器迭代次数为\(T\)。

6.2 输出

最终强学习器\(f(x)\)。

6.3 流程

  1. 对训练集进行第\(t\quad(t=1,2,\cdots,T)\)次随机采样,共采集\(m\)次,得到有\(m\)个样本的采样集\(D_t\)
  2. 用采样集\(D_t\)训练第\(t\)个决策树模型\(G_t(x)\),在训练决策树模型的时候,从\(n\)个特征中随机选择\(n_{sub}\)个特征,然后从\(n_{sub}\)个特征中选择最优的特征作为划分决策树的条件。
  3. 对于分类问题,使用相对多数投票法预测分类结果;对于回归问题,使用简单平均法得到预测值

七、随机森林优缺点

7.1 优点

  1. 由于弱学习器之间不存在依赖关系,所以可以并行训练模型,这对于大数据非常有优势
  2. 既可以解决回归问题又可以解决分类问题,灵活
  3. 由于在生成模型的时候,可以自由选择特征的划分,可以一定程度解决特征维度较高的问题
  4. RF相当于AdaBoost和GBDT,简单,看数学公式推导量就知道了
  5. 由多个不存在依赖关系的弱学习器结合而成,所以对部分特征缺失不敏感

7.2 缺点

  1. 由于决策树模型对特征进行了选择,因此取值划分较多的特征,会影响RF模型拟合的效果

八、小结

集成学习到这也算是告一段落了,相信大家对Boosting和Bagging算法有了很清晰的了解,对于Boosting中的AdaBoost和GBDT,由于逻辑较为复杂,可以多看一看;对于Bagging中的随机森林,随机森林本身并不是很难理解,只要能够很自如的运用随机森林的一些拓展算法即可。

04-10 Bagging和随机森林的更多相关文章

  1. 机器学习回顾篇(12):集成学习之Bagging与随机森林

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  2. Bagging与随机森林算法原理小结

    在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...

  3. 机器学习 —— 决策树及其集成算法(Bagging、随机森林、Boosting)

    本文为senlie原创,转载请保留此地址:http://www.cnblogs.com/senlie/ 决策树--------------------------------------------- ...

  4. 机器学习总结(二)bagging与随机森林

    一:Bagging与随机森林 与Boosting族算法不同的是,Bagging和随机森林的个体学习器之间不存在强的依赖关系,可同时生成并行化的方法. Bagging算法 bagging的算法过程如下: ...

  5. Bagging与随机森林(RF)算法原理总结

    Bagging与随机森林算法原理总结 在集成学习原理小结中,我们学习到了两个流派,一个是Boosting,它的特点是各个弱学习器之间存在依赖和关系,另一个是Bagging,它的特点是各个弱学习器之间没 ...

  6. Bagging之随机森林

    随机森林(Random Forest)是一种Bagging(Bootstrap Aggregating)集成算法,在样本随机(样本扰动)的基础上,进一步运用特征随机(属性扰动)的机制,得到比一般的Ba ...

  7. 决策树算法(Bagging与随机森林)

    Bagging算法: 将训练数据集进行N次Bootstrap采样得到N个训练数据子集,对每个子集使用相同的算法分别建立决策树,最终的分类(或回归)结果是N个决策树的结果的多数投票(或平均). 其中,B ...

  8. bootstrap && bagging && 决策树 && 随机森林

    看了一篇介绍这几个概念的文章,整理一点点笔记在这里,原文链接: https://machinelearningmastery.com/bagging-and-random-forest-ensembl ...

  9. 机器学习相关知识整理系列之二:Bagging及随机森林

    1. Bagging的策略 从样本集中重采样(有放回)选出\(n\)个样本,定义子样本集为\(D\): 基于子样本集\(D\),所有属性上建立分类器,(ID3,C4.5,CART,SVM等): 重复以 ...

随机推荐

  1. 面向微服务的体系结构评审中需要问的三个问题-咖啡杂谈:Java、新闻、故事和观点

    面向微服务的体系结构如今风靡全球.这是因为更快的部署节奏和更低的成本是面向微服务的体系结构的基本承诺. 然而,对于大多数试水的公司来说,开发活动更多的是将现有的单块应用程序转换为面向微服务的体系结构, ...

  2. 携程PMO--小罗说敏捷之WIP限制在制品

    转自本人运营的公众号“ 携程技术中心PMO”(ID:cso_pmo)         WIP是什么?   WIP(work in progress)指的就是工作中心在制品区.在经过部分制程之后,还没有 ...

  3. 为什么spark中只有ALS

    WRMF is like the classic rock of implicit matrix factorization. It may not be the trendiest, but it ...

  4. Java中存储金额用什么数据类型

    Java面试高频问题:你会用什么数据类型来存储金额? 如果这个时候你回答float,double那么恭喜你,又可以省出时间来准备别的公司的面试了,当面试官说float,和double不行的时候你可能还 ...

  5. rocketmq学习(一) rocketmq介绍与安装

    1.消息队列介绍 消息队列本质上来说是一个符合先进先出原则的单向队列:一方发送消息并存入消息队列尾部(生产者投递消息),一方从消息队列的头部取出消息(消费者消费消息).但对于一个成熟可靠的消息队列来说 ...

  6. charles Glist发布设置

    本文参考:charles Glist发布设置 在这里可以设置Github账户, 发布list的大小限制:等等: 在这里 Auh 就是设置Github账户, 设置登陆你的Github后,才能针对该用户进 ...

  7. Java 中 Set、List 和 Map 的遍历

    java集合类的使用可以说是无处不在,总的我们可以将之分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. package tup.lucene. ...

  8. 在Typora中使用Markdown

    在Typora中使用Markdown 记:准备正式开始在博客园写博客,故学习Markdown语法,为写博客做好准备.以前也在CSDN写过一些,但广告太多,个人更喜欢博客园的简洁. 1. 标题 (#)标 ...

  9. Linux配置部署_新手向(四)——Redis安装与配置

    前言 配置完mysql之后,我们来紧接着安装redis,毕竟这些不用太多的思考,就是命令执行,配置文件,连接测试. 安装 首先,我们要看安装哪个版本,可以在Redis官网看看我们安装哪个版本. 在之前 ...

  10. 使用Spring中的PropertyPlaceholderConfigurer读取文件

    目录 一. 简介 二. XML 方式 三. Java 编码方式 一. 简介 大型项目中,我们往往会对我们的系统的配置信息进行统一管理,一般做法是将配置信息配置与一个cfg.properties 的文件 ...