机器学习之Bagging与随机森林笔记
集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能。这对“弱学习器”尤为明显,因此集成学习的很多理论研究都是针对弱学习器进行的,而基学习器有时也被直接称为弱学习器。虽然从理论上来说使用弱学习器集成足以获得好的性能,但在实践中出于种种考虑,例如希望使用较少的个体学习器,或是重用关于常见学习器的一些经验等,人们往往会使用比较强的学习器。当然,还得看实践的结果,有时也不一定集成相对强的学习器效果就会有多好。
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与随机森林笔记的更多相关文章
- 机器学习回顾篇(12):集成学习之Bagging与随机森林
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- 机器学习 —— 决策树及其集成算法(Bagging、随机森林、Boosting)
本文为senlie原创,转载请保留此地址:http://www.cnblogs.com/senlie/ 决策树--------------------------------------------- ...
- 机器学习总结(二)bagging与随机森林
一:Bagging与随机森林 与Boosting族算法不同的是,Bagging和随机森林的个体学习器之间不存在强的依赖关系,可同时生成并行化的方法. Bagging算法 bagging的算法过程如下: ...
- Bagging与随机森林算法原理小结
在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...
- Bagging与随机森林(RF)算法原理总结
Bagging与随机森林算法原理总结 在集成学习原理小结中,我们学习到了两个流派,一个是Boosting,它的特点是各个弱学习器之间存在依赖和关系,另一个是Bagging,它的特点是各个弱学习器之间没 ...
- 机器学习相关知识整理系列之二:Bagging及随机森林
1. Bagging的策略 从样本集中重采样(有放回)选出\(n\)个样本,定义子样本集为\(D\): 基于子样本集\(D\),所有属性上建立分类器,(ID3,C4.5,CART,SVM等): 重复以 ...
- 机器学习——Bagging与随机森林算法及其变种
Bagging算法: 凡解:给定M个数据集,有放回的随机抽取M个数据,假设如此抽取3组,3组数据一定是有重复的,所以先去重.去重后得到3组数据,每组数据量分别是s1,s2,s3,然后三组分别训练组合 ...
- bootstrap && bagging && 决策树 && 随机森林
看了一篇介绍这几个概念的文章,整理一点点笔记在这里,原文链接: https://machinelearningmastery.com/bagging-and-random-forest-ensembl ...
- Bagging之随机森林
随机森林(Random Forest)是一种Bagging(Bootstrap Aggregating)集成算法,在样本随机(样本扰动)的基础上,进一步运用特征随机(属性扰动)的机制,得到比一般的Ba ...
随机推荐
- QTextToSpeech Win7奔溃
在linux下,它是调用speech-dispatcher.在其它不同的平台上,调用各自平台的TTS引擎.所以在使用的时候,要确保本地的TTS引擎是可用的. 本地TTS引擎不可用可能会在声明QText ...
- rockchip 硬解码相关
http://opensource.rock-chips.com/wiki_Mpp MPP You can get mpp source from git. git clone -b release ...
- C++模板编程中只特化模板类的一个成员函数(花样特化一个成员函数)
转自:https://www.cnblogs.com/zhoug2020/p/6581477.html 模板编程中如果要特化或偏特化(局部特化)一个类模板,需要特化该类模板的所有成员函数.类模板中大多 ...
- python,在路径中引用变量的方法
fr = open('E:\\pyCharm\\LogisticRegression\\1\\'+变量+'.txt')
- OpenJudge 计算概论1007:点评赛车
总时间限制: 1000ms 内存限制: 65536kB描述4名专家对4款赛车进行评论1)A说:2号赛车是最好的:2)B说:4号赛车是最好的:3)C说:3号赛车不是最好的:4)D说: B说错了.事实上只 ...
- JEECG hibernate.hbm2ddl.auto
配置hibernate根据实体类自动建表功能 - lixuyuan的专栏 - CSDN博客https://blog.csdn.net/lixuyuan/article/details/8057119 ...
- Spark累加器(Accumulator)
一.累加器简介 在Spark中如果想在Task计算的时候统计某些事件的数量,使用filter/reduce也可以,但是使用累加器是一种更方便的方式,累加器一个比较经典的应用场景是用来在Spark St ...
- ES6深入浅出-4 迭代器与生成器-3.生成器 & for...of
迭代器平时用的很少.但是如果你是写框架的,你会经常用到迭代器. 生成器是专门用来做迭代器的东西 发布器是要产生一个叫做next的对象,如果你要产生这种对象.就可以使用ES6新出的语法. ES6的新语法 ...
- 【FreeMarker】FreeMarker使用(三)
搭建一个 1.FreeMarker取值 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&quo ...
- 使用SoapUI测试wsdl
webservice服务wsdl地址:http://localhost:8080/services/HelloWorld?wsdl new project: new soap project: 调用测 ...