随机森林算法属性

随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本为那一类。

随机森林和使用决策树作为基本分类器的(bagging)有些类似。以决策树为基本模型的bagging在每次bootstrap放回抽样之后,产生一棵决策树,抽多少样本就生成多少棵树,在生成这些树的时候没有进行更多的干预。而随机森林也是进行bootstrap抽样,但它与bagging的区别是:在生成每棵树的时候,每个节点变量都仅仅在随机选出的少数变量中产生。因此,不但样本是随机的,连每个节点变量(Features)的产生都是随机的。

许多研究表明, 组合分类器比单一分类器的分类效果好,随机森林(random forest)是一种利用多个分类树对数据进行判别与分类的方法,它在对数据进行分类的同时,还可以给出各个变量(基因)的重要性评分,评估各个变量在分类中所起的作用。

随机森林在以决策树为基学习器构建Bagging的基础上,进一步在训练过程中引入了随机属性选择。传统决策树在选择划分属性时,是在当前结点的属性集合中选择一个最优属性;在随机森林中,对基决策树的每个结点,先从该结点的属性集合d中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分,参数k控制了随机性的引入程度,一般推荐k=log2d

一开始我们提到的随机森林中的“随机”就是指的这里的两个随机性。两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感)。由于Bagging每次训练都进行采样来训练模型,所以模型的泛化能力很强,对于降低模型的方差很有作用。当然对于训练基地额拟合误差就会大一点,也就输模型偏倚会大一些。

注意到这和GBDT的子采样是不同的,GBDT的子采样是无放回采样,而Bagging的子采样是有有放回采样。

对于一个样本,它在某一次含m个样本的训练集的随机采样中,每次被采集到的概率是1/m。不被采集到的概率为1−1/m。如果m次采样都没有被采集中的概率是(1−1/m)m。当m→∞时,(1−1/m)m→1/e≃0.368。也就是说,在bagging的每轮随机采样中,训练集中大约有36.8%的数据没有被采样集采集中。对于这36.8%的没有被采集到的数据,我们称之为袋外数据(Out of bag,简称oog)。这些数据没有参与训练模型的拟合,因此可以检验模型泛化能力.

随机决策树的构造

建立每棵决策树的过程中,有2点:采样与完全分裂。首先是两个随机采样的过程,RF要对输入数据进行一下行(样本)、列(特征)采样,对于行采样(样本)采用有放回的方式,也就是在采样得到的样本中可以有重复。从M个特征中(列采样)出m特征。之后就是用完全分裂的方式建立出决策树。这样决策树的某一个叶子节点要么是无法继续分裂的,要么里面的所有样本的都是指向的同一个分类。一般很多的决策树算法都一个重要的步骤 - 剪枝,但是这里不这样干,由于之前的两个随机采样的过程保证了随机性,所以就算不剪枝,也不会出现over-fitting。

分裂的办法是:采用上面说的列采样的过程从这m个属性中采用某种策略(比如说信息增益)来选择1个属性作为该节点的分裂属性。决策树形成过程中每个节点都要按完全分裂的方式来分裂,一直到不能够再分裂为止(如果下一次该节点选出来的那一个属性是刚刚其父节点分裂时用过的属性,则该节点已经达到了叶子节点,无须继续分裂了)。

每棵树的按照如下规则生成:

  1. 如果训练集大小为N,对于每棵树而言,随机且有放回地从训练集中的抽取N个训练样本,作为该树的训练集;
  2. 如果每个样本的特征维度为M,指定一个常数m<<M,随机地从M个特征中选取m个特征子集,每次树进行分裂时,从这m个特征中选择最优的;
  3. 每棵树都尽最大程度的生长,并且没有剪枝过程。

总的来说就是随机选择样本数,随机选取特征,随机选择分类器,建立多颗这样的决策树,然后通过这几课决策树来投票,决定数据属于哪一类(投票机制有一票否决制、少数服从多数、加权多数)

随机森林算法优缺点

主要优点是:

训练可以高度并行化,对于大数据大样本(千万级样本,多变量)训练速度有优势。

它能够处理很高维度(feature很多)的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化,且不需要降维。

可以得到变量重要性排序(两种方式:基于OOB误分率的增加量和基于分裂时的GINI下降量)。

由于采取了随机采样,模型的泛化能力强,方差小,不容易过拟合(两个随机,随机抽取特征,随机抽取样本)。

对于不平衡数据集来说,RF提供平衡误差的有效方法(可以通过采样)。

如果有很大一部分的特征遗失(缺失值),仍可以维持准确度。

相比于Boosting系列的GBDT和Adaboost,RF实现比较简单。

主要缺点是:

随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟合。

对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。

RF在解决回归问题时,并不如分类表现那么好,因为它不能给出一个连续的输出(决策树本身限定)。

处理小数据或低维数据,可能不能产生很好的分类。

随机森林如何处理缺失值?

根据随机森林创建和训练的特点,随机森林对缺失值的处理还是比较特殊的。

  • 首先,给缺失值预设一些估计值,比如数值型特征,选择其余数据的中位数或众数作为当前的估计值
  • 然后,根据估计的数值,建立随机森林,把所有的数据放进随机森林里面跑一遍。记录每一组数据在决策树中一步一步分类的路径.
  • 判断哪组数据和缺失数据路径最相似,引入一个相似度矩阵,来记录数据之间的相似度,比如有N组数据,相似度矩阵大小就是N*N
  • 如果缺失值是类别变量,通过权重投票得到新估计值,如果是数值型变量,通过加权平均得到新的估计值,如此迭代,直到得到稳定的估计值。

其实,该缺失值填补过程类似于推荐系统中采用协同过滤进行评分预测,先计算缺失特征与其他特征的相似度,再加权得到缺失值的估计,而随机森林中计算相似度的方法(数据在决策树中一步一步分类的路径)乃其独特之处。

什么是OOB?随机森林中OOB是如何计算的,它有什么优缺点?

上面我们提到,构建随机森林的关键问题就是如何选择最优的m,要解决这个问题主要依据计算袋外错误率oob error(out-of-bag error)。

bagging方法中Bootstrap每次约有1/3的样本不会出现在Bootstrap所采集的样本集合中,当然也就没有参加决策树的建立,把这1/3的数据称为袋外数据oob(out of bag),它可以用于取代测试集误差估计方法。

袋外数据(oob)误差的计算方法如下:

  • 对于已经生成的随机森林,用袋外数据测试其性能,假设袋外数据总数为O,用这O个袋外数据作为输入,带进之前已经生成的随机森林分类器,分类器会给出O个数据相应的分类
  • 因为这O条数据的类型是已知的,则用正确的分类与随机森林分类器的结果进行比较,统计随机森林分类器分类错误的数目,设为X,则袋外数据误差大小=X/O

优缺点:这已经经过证明是无偏估计的,所以在随机森林算法中不需要再进行交叉验证或者单独的测试集来获取测试集误差的无偏估计。

为什么要进行随机抽样?

如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样的,依然没有解决决策树过拟合问题。随机抽样是为了保证不同决策树之间的多样性,从而提高模型的泛化能力。使得随机森林不容易陷入过拟合,并且具有较好的抗噪能力(比如:对缺省值不敏感)。

为什么要有放回地抽样?

而随机森林最后分类取决于多棵树(弱分类器)的投票表决,这种表决应该是"求同"。如果是无放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是"有偏的",从而影响最终的投票结果。为了保证最终结果的可靠性,同时又要保证模型的泛化能力,需要每一颗树既要“求同“ 又要 ”存异”

模型参数方法

控制bagging框架的参数

  • estimators:随机森林中树的棵树,即要生成多少个基学习器(决策树)。
  • boostrap:是否采用自助式采样生成采样集。
  • obb_score:是否使用袋外数据来估计模型的有效性。

控制决策树的参数

  • criterion:选择最优划分属性的准则,默认是"gini",可选"entropy"。
  • max_depth:决策树的最大深度
  • max_features:随机抽取的候选划分属性集的最大特征数(属性采样)
  • min_samples_split内部节点再划分所需最小样本数。默认是2,可设置为整数或浮点型小数。
  • min_samples_leaf:叶子节点最少样本数。默认是1,可设置为整数或浮点型小数。
  • max_leaf_nodes:最大叶子结点数。默认是不限制。
  • min_weight_fraction_leaf:叶子节点最小的样本权重和。默认是0。
  • min_impurity_split:节点划分最小不纯度。

其他参数:

  • n_jobs:并行job的个数
  • verbose:是否显示任务进程

对象属性:

  • estimators_:打印输出随机森林中所有的树。
  • classes_:输出样本集的类别。
  • n_classes_:输出类别数量。
  • n_features_:特征数量。
  • n_outputs_:当模型被fit时的输出维度。看看下图来感受一些这个属性。
  • feature_importances_:特征重要性。
  • oob_score_:袋外估计准确率得分,必须是oob_score参数选择True的时候才可用。
  • oob_decision_function_:袋外估计对应的决策函数。

方法:

  • apply(X):将训练好的模型应用在数据集X上,并返回数据集X对应的叶指数。
  • decision_function(X):返回决策函数值(比如svm中的决策距离)。
  • fit(X,Y):在数据集(X,Y)上训练模型。
  • get_parms():获取模型参数。
  • predict(X):预测数据集X的结果。
  • predict_log_proba(X):预测数据集X的对数概率。
  • predict_proba(X):预测数据集X的概率值。
  • score(X,Y):输出数据集(X,Y)在模型上的准确率。

https://cloud.tencent.com/developer/article/1170422

https://cloud.tencent.com/developer/article/1541702

https://www.cnblogs.com/pinard/p/6156009.html

集成学习-Bagging集成学习算法随机森林(Random Forest)相关推荐

  1. 集成学习(Bagging和AdaBoost和随机森林(random forest))

    前言 集成学习的特点就是一个最终模型由很多分类器集成起来,最终通过投票或者加权的方式来获得最终结果.有两种经典的方法:bagging和adaboost. bagging bagging做法 其中: y ...

  2. 初勘数据处理之预测算法(随机森林random forest)附matlab源码

    初勘数据处理之预测算法(随机森林random forest)附matlab源码 集成学习方法 集成学习方法,是整合多个分类方法的预测结果,以提高分类准确率.集成学习方法先用训练数据构建一组基分类器,再 ...

  3. 机器学习方法(六):随机森林Random Forest,bagging

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 前面机器学习方法(四)决策树讲了经典 ...

  4. 随机森林Random Forest,bagging

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld.  技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 前面机器学习方法(四)决策树讲了经 ...

  5. 【机器学习】随机森林 – Random forest

    文章目录 一.随机森林是什么? 1. 随机森林是一种集成学习算法 2. 随机森林的基学习器是决策树 二.随机森林 – Random Forest | RF 三.构造随机森林的 4 个步骤 四.随机森林 ...

  6. 随机森林 – Random forest

    随机森林 – Random forest 随机森林是一种由决策树构成的集成算法,他在很多情况下都能有不错的表现. 本文将介绍随机森林的基本概念.4 个构造步骤.4 种方式的对比评测.10 个优缺点和 ...

  7. 通俗解读随机森林Random Forest

    通俗解读随机森林Random Forest 写在前面 1. 什么是集成学习 2. 什么是Bagging 3 随机森林 写在前面 声明:本文主要参考的是周志华老师的<机器学习>西瓜书,参杂了 ...

  8. 【ML】随机森林(Random Forest) 从入门到放弃再到掌握

    目录 集成学习 决策树 Boosting Adaboost GBDT 梯度提升决策树是属于boosting集成学习的一种方法,通过构建多颗CART回归树,每一轮利用上一轮学习器的残差进行树的创建.该残 ...

  9. 随机森林(Random Forest)和梯度提升树(GBDT)有什么区别?

    随机森林(Random Forest)和梯度提升树(GBDT)有什么区别? 随机森林属于 集成学习 中的 Bagging(Bootstrap AGgregation 的简称) 方法. 随机森林是由很多 ...

  10. 西瓜书+实战+吴恩达机器学习(十三)监督学习之随机森林 Random Forest

    文章目录 0. 前言 1. 随机森林算法 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 Bagging:对数据集进行有放回采样,采mmm次构成一个新的数据集,基 ...

最新文章

  1. linux下出现ping:unknown host www.baidu.com问题时的解决办法——ubuntu下局域网络的配置...
  2. swift基础--变量
  3. 关于服务器返回信息的Unicode转码的方法
  4. 【Android 插件化】使用 PluginKiller 帮助应用开发者规避发布的 APK 安装包被作为插件的风险 ( 验证应用是否运行在插件化引擎中 )
  5. mysql未知数据库_如何处理这个错误(1049,“未知数据库”/ users / ohyunjun / work / astral / mysql“”)...
  6. IllegalThreadStateException
  7. leetcood学习笔记-2-两数相加
  8. AlphaControls TsSkinManager 控件
  9. [iOS 逆向 2] 越狱介绍
  10. 无需软件,笔记本自带wifi功能,几条命令轻松搞定
  11. 30多个投资理财工具,总有一款适合你
  12. gitter 卸载_最佳Gitter渠道:Node.js
  13. 我们爱分享----200多个js技巧代码
  14. 全国程序员【工资统计】, 你想去哪个城市工作?
  15. 极狐公司官方澄清声明
  16. MySql 查询数据库中所有表名
  17. node 打开浏览器
  18. PHP 在网页中的运用
  19. 负重阳光城之悬崖边的股价|一点财经
  20. 什么是应用服务器,有什么用?

热门文章

  1. json字符串与对象互相转换
  2. session过期跳转到登陆页面并跳出iframe框架的最简单方法
  3. 同一个电脑安装两个jdk版本
  4. 用tinyscript解一些典型算法题,小试牛刀
  5. sqlite insert or replace 和 insert or ignore 用法
  6. 从 Java 9 开始,Java 就华丽的转身为微服务了…
  7. 通俗讲解分布式锁,看完不懂算作者输
  8. 从0到70%:Chrome上位揭秘!
  9. 程序员,你想不想进大厂?
  10. 基础知识的学习,来自十年程序员的经验分享