集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能。这对“弱学习器”尤为明显,因此集成学习的很多理论研究都是针对弱学习器进行的,而基学习器有时也被直接称为弱学习器。虽然从理论上来说使用弱学习器集成足以获得好的性能,但在实践中出于种种考虑,例如希望使用较少的个体学习器,或是重用关于常见学习器的一些经验等,人们往往会使用比较强的学习器。当然,还得看实践的结果,有时也不一定集成相对强的学习器效果就会有多好。

bagging的策略

1)bootstrap aggregation

2)从样本中重采样选出n个样本

3)在所有属性上,对这n个样本建立分类器(ID3、C4.5、CART、SVM、Logistic回归等)

4)重复以上两步m次,即获得了m个分类器

5)将数据放在这m个分类器上,最后根据这m个分类器的投票结果,决定数据属于哪一类

可以发现,Bootstrap每次越有36.8%的样本不会出现在Bootstrap所采集的样本集合中,将未参与模型训练的数据称为袋外数据。它可以用于取代测试集用于误差估计。

这里的36.7%是如何得到的呢?

假设有N个样本,每个样本被选中的概率为1/N,未被选中的概率为(1-1/N),总的未被选中的概率为

(1-1/N)N,当N-->∞时(1-1/N)N≈1/e约为36.8%,

1)Breiman以经验性实践的形式证明袋外数据误差估计与同训练集一样大小的测试集精度相同

2)得到的模型参数是无偏估计

随机森林

随机森林在bagging基础上做了修改

  1)从样本集中用Bootstrap采样选出n个样本;

  2)从所有属性中随机选择k个属性,选择最佳分割属性作为结点建立CART;

  3)重复以上两步m次,即建立了m课CART决策树

  4)这m个CART形成随机森林,通过投票表决结果,决定数据属于哪一类

  5)但也可以使用SVM、Logistic回归等其它分类器,习惯上,这些分类器组成的“总分类器”,仍然叫做随机森林。

投票机制

首先转载https://blog.csdn.net/PythonstartL/article/details/83010928博文的几个问题与答案

1.投票法的流程?
 投票法的流程是寻找几个基分类器,然后基于分类器的超过半数的结果作为最终的预测分类。

2.投票法如何选择特征 ?
投票法不寻找特征,寻找特征是各个基分类器要干的事情。

3.投票法 如何构建特征 ?
同第二问

4.投票法如何用于分类或回归?
如果是分类,投票法把超过半数以上的投票结果作为要预测的分类,投票法处理回归问题,是将各个基分类器的回归结果简单求平均

5.投票法通过什么方式减少误差 ?
通过上文给的证明可以看出,在基分类器的个数足够多且相互独立,即使他们之比什么都不干好一点点,也能指数级减少误差。

6.投票法的效果相比于传统的LR,SVM效果为什么好一些 ?
事实上如果基分类器都是这些传统模型且相互独立,投票法确实从上文中要比传统的方法的要好一些。但是呢,周志华老师给了一个非常精彩的例子在机器学习172页,当基分类器差不多时,投票法反而效果下降了

投票法 如何加速训练?
投票法的参数有哪些,如何调参 ?
投票法实战当中遇到的一些问题 ?
投票法的优缺点 ?
该集成学习算法与其他集成方法的不同

这几个问题 一起回答,加速训练即加速基分类器的训练就好,调参是基分类器的参数,投票法的优缺点主要看基分类的独立性,如果是决策树、SVM这几种完全不同的思路的基分类器,可能效果会好些。如果都是树模型说不定会取得比较差的结果。
投票法分为绝对多数投票法,相对多数投票法,加权投票法,具体公式参照周志华的机器学习p182~183

样本不均衡常用处理方法

假定样本数目A类比B类多,且严重不平衡:

  A类欠采样:

    1)随机欠采样

    2)A类分成若干子类,分别与B类进入ML模型

    3)基于聚类的A类分割(用某种聚类办法聚类成若干个簇,再从簇中选择有代表性的样本)

  B类过采样

    避免欠采样造成的信息丢失

  B类数据合成

    1)随机插值得到新样本

    2)SMOTE(Synthetic Minority Over-sampling Technique)

  代价敏感学习Cost Sensitive Learning

    降低A类权值,提高B类权值

使用随机森林建立计算样本间的相似度

1)原理:若两样本同时出现在相同叶结点的次数越多,则二者越相似

2)记样本个数为N,初始化NN的零矩阵S,S[i,j]表示样本i和样本j的相似度

3)对于m个决策树形成的随机森林,遍历所有决策树的所有叶子节点:

  记该叶节点包含的样本为sample[1,2,...,k],则S[i][j]累加1

    样本i、j∈sample[1,2,...,k]

    样本i、j出现在相同叶结点的次数增加一次

4)遍历结束,则S为样本间相似度矩阵

使用随机森林计算特征重要度

随机森林是常用的衡量特征重要性的方法。

  计算正例经过的结点,使用经过结点的数目、经过结点的基尼指数和等指标。或者,随机替换一列数据,重新建立决策树,计算新模型的正确率变化,从而考虑这一列特征的重要性。

总结

决策树、随机森林的代码清晰、逻辑简单,在胜任分类问题的同时,往往也可以作为对数据分布探索的首要尝试算法

随机森林的继承思想也可用在其它分类器的设计中

如何通过随机森林做样本的异常检测?

答:统计样本间位于相同决策树的叶结点的个数,形成样本相似度矩阵。

      

机器学习之Bagging与随机森林笔记的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. 机器学习——Bagging与随机森林算法及其变种

    Bagging算法:  凡解:给定M个数据集,有放回的随机抽取M个数据,假设如此抽取3组,3组数据一定是有重复的,所以先去重.去重后得到3组数据,每组数据量分别是s1,s2,s3,然后三组分别训练组合 ...

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

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

  9. Bagging之随机森林

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

随机推荐

  1. LITEIDE配置

    LITEIDE配置 工具--管理GOPATH 工具--编辑当前环境

  2. (信贷风控八)行为评分卡模型(B卡)的介绍

    python信用评分卡建模(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_ca ...

  3. autoComplete TextView

    这个比较简单,只是将AutoCompleteTextView绑定一个ArrayAdapter就可以了. 界面布局: <?xml version="1.0" encoding= ...

  4. 国人开发的api测试工具 ApiPost

    挺好用的 ApiPost https://www.apipost.cn/download.html 需要注册,免费试用.感觉比postman好用

  5. 初始化html font-size

    (function () { var docEl = document.documentElement, resizeEvt = 'orientationchange' in window ? 'or ...

  6. openresty开发系列23--lua面向对象

    openresty开发系列23--lua面向对象 面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构.java,c++,.net等都支持面向对 ...

  7. IDEA子项目的相互依赖

    A项目依赖B项目 一.B项目打包,执行install 这一步其实就是把你的项目打包到本地仓库,你可以在本地仓库看到相应的jar包 二.在A项目的pom.xml引入依赖可以了 当B项目修改后,需要重新打 ...

  8. 记一次haproxy反向代理配置

    首先借用一下前辈的话,解释下反向代理是什么? 反向代理:以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...

  9. 【php】PHP制作QQ微信支付宝三合一收款码

    分析 微信扫这个,支付宝扫那个,不仅要加载多张二维码,还要加css/js让它变的好看,作为一个又懒又不想写这些东西的程序猿来说,这可不行. 那能不能把QQ微信支付宝三合一,只需要扫一个收款码就行呢? ...

  10. Python 初级 5 判断再判断(四)

    一 .复习 分支:完成测试并根据结果做出判断称为分支. 代码块:一行或放在一起的多行代码 缩进:一个代码行稍稍靠右一点 关系操作符(比较操作符):==, >, >=, <, < ...