更新、更全的《机器学习》的更新网站,更有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. 【Offer】[55-2] 【平衡二叉树】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一棵二叉树的根节点,判断该树是不是平衡二叉树.如果某二叉树中任意节点的左.右子树的深度相差不超过1,那么它就是一棵平衡二叉树.例如, ...

  2. 洛谷 P1059【明明的随机数】 题解

    事实上,完全可以先将输入进来带有重复的元素们保存进一个数组并对该数组进行排序,再将该数组的各个元素逐个判断是否与前一元素相同(重复与否的判断),将不重复的元素转移至另一个数组,与此同时进行对不重复元素 ...

  3. springboot打包jar包后运行

    我们知道,spring boot内嵌tomcat,打包成jar包以后,直接就可以运行. 我们也可以使用启动项里面的mian入口来运行程序. 运行jar包时,我们一般是java -jar xxx.jar ...

  4. eclipse使用Gitlab

    1.生成SSH key 用的是eclipse自带的生成key的工具,windows->preferences->General->Network Connections->SS ...

  5. js数组增删元素

    操作数组的方法 push() 结尾添加 数组.push(元素) 参数 描述 newelement1 必需.要添加到数组的第一个元素. newelement2 可选.要添加到数组的第二个元素. newe ...

  6. LocalBroadcastManager 的简单介绍

    Android应用开发之(小技巧之LocalBroadcastManager) Android v4 兼容包提供android.support.v4.content.LocalBroadcastMan ...

  7. crypto 的使用方法和说明

    crypto 模块提供了加密功能,包含对 OpenSSL 的哈希.HMAC.加密.解密.签名.以及验证功能的一整套封装.我们这里讲crypto AES算法加密 一.使用步骤 1.引入Crypto 1. ...

  8. python实现经典算法

    1,快速排序 题目形式:手写一下快速排序算法. 题目难度:中等. 出现概率:约50%.手写快排绝对是手撕代码面试题中的百兽之王,掌握了它就是送分题,没有掌握它就是送命题. 参考代码: def quic ...

  9. centos 搭建SVN服务器简单流程

    yum -y install subversion mkdir -p /work/svn && cd /work/svn //创建版本库 svnadmin create test -- ...

  10. [LeetCode]Jump GameII

    题目:Jump GameII 如果要求找最小的调数,考虑扩张的思路. 思路如下: 1.首先找起始位能到达的范围是否覆盖了最终位置,并记录下搜索中的最远能到达的位置值,即max{nums[i] + i} ...