随机森林算法简介

2024-05-19 06:29

1. 随机森林算法简介

随机森林是一种包含多个决策树的分类器。随机森林的算法是由Leo Breiman和Adele Cutler发展推论出的。随机森林,顾名思义就是用随机的方式建立一个森林,森林里面由很多的决策树组成,而这些决策树之间没有关联。
  
 随机森林就是用过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支------集成学习(Ensemble Learning)方法。集成学习就是使用一系列学习器进行学习,并将各个学习方法通过某种特定的规则进行整合,以获得比单个学习器更好的学习效果。集成学习通过建立几个模型,并将它们组合起来来解决单一预测问题。它的工作原理主要是生成多个分类器或者模型,各自独立地学习和作出预测。
  
 随机森林是由多棵决策树构成的。对于每棵树,他们使用的训练集是采用放回的方式从总的训练集中采样出来的。而在训练每棵树的结点时,使用的特征是从所有特征中采用按照一定比例随机地无放回的方式抽取的。
  
 随机森林的建立基本由随机采样和完全分裂两部分组成。
  
 随机森林对输入的数据进行行、列的采样,但两种采样的方法有所不同。对于行采样,采用的方式是有放回的的采样,即在采样得到的样本集合中,可能会有重复的样本。假设输入样本为N个,那么采样的样本也为N个。这使得在训练时,每棵树的输入样本都不是全部的样本,所以相对不容易出现过拟合。对于列采样,采用的方式是按照一定的比例无放回的抽样,从M个特征中,选择m个样本(m<M);
  
 在形成决策树的过程中,决策树的每个节点都要按完全分裂的方式来分裂,直到结点不能再分裂。采用这种方式建立出的决策树的某一个叶子节点要么是无法继续分裂的,要么里面的所有样本都是指向同一个分类器。

随机森林算法简介

2. 随机森林算法是什么?


3. 随机森林的学习算法

根据下列算法而建造每棵树:1. 用 N 来表示训练例子的个数,M表示变量的数目。2. 我们会被告知一个数 m ,被用来决定当在一个节点上做决定时,会使用到多少个变量。m应小于M3. 从N个训练案例中以可重复取样的方式,取样N次,形成一组训练集(即bootstrap取样)。并使用这棵树来对剩余预测其类别,并评估其误差。4. 对于每一个节点,随机选择m个基于此点上的变量。根据这 m 个变量,计算其最佳的分割方式。5. 每棵树都会完整成长而不会剪枝(Pruning)(这有可能在建完一棵正常树状分类器后会被采用)。

随机森林的学习算法

4. 随机森林算法是什么?

随机森林是一种比较新的机器学习模型。
经典的机器学习模型是神经网络,有半个多世纪的历史了。神经网络预测精确,但是计算量很大。上世纪八十年代Breiman等人发明分类树的算法(Breiman et al. 1984),通过反复二分数据进行分类或回归,计算量大大降低。
2001年Breiman把分类树组合成随机森林(Breiman 2001a),即在变量(列)的使用和数据(行)的使用上进行随机化,生成很多分类树,再汇总分类树的结果。随机森林在运算量没有显著提高的前提下提高了预测精度。
随机森林对多元共线性不敏感,结果对缺失数据和非平衡的数据比较稳健,可以很好地预测多达几千个解释变量的作用(Breiman 2001b),被誉为当前最好的算法之一(Iverson et al. 2008)。

随机森林优点:
随机森林是一个最近比较火的算法,它有很多的优点:
a、在数据集上表现良好,两个随机性的引入,使得随机森林不容易陷入过拟合。
b、在当前的很多数据集上,相对其他算法有着很大的优势,两个随机性的引入,使得随机森林具有很好的抗噪声能力。
c、它能够处理很高维度(feature很多)的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化。

5. 随机森林算法的原理

随机森林指的是利用多棵树对样本进行训练并预测的一种分类器。该分类器最早由Leo Breiman和Adele Cutler提出,并被注册成了商标。
在机器学习中,随机森林是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。 Leo Breiman和Adele Cutler发展出推论出随机森林的算法。 而 "Random Forests" 是他们的商标。 

这个术语是1995年由贝尔实验室的Tin Kam Ho所提出的随机决策森林(random decision forests)而来的。
这个方法则是结合 Breimans 的 "Bootstrap aggregating" 想法和 Ho 的"random subspace method"以建造决策树的集合。
学习算法
根据下列算法而建造每棵树:
1、 用N来表示训练用例(样本)的个数,M表示特征数目。
2、 输入特征数目m,用于确定决策树上一个节点的决策结果;其中m应远小于M。
3、 从N个训练用例(样本)中以有放回抽样的方式,取样N次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。
4、 对于每一个节点,随机选择m个特征,决策树上每个节点的决定都是基于这些特征确定的。根据这m个特征,计算其最佳的分裂方式。
5、 每棵树都会完整成长而不会剪枝,这有可能在建完一棵正常树状分类器后会被采用)。

随机森林算法的原理

6. 分类算法 - 随机森林

 上次我写了决策树算法,决策树可以解决分类问题,也有CART算法可以解决回归问题,而随机森林也和决策树非常类似,采用了CART算法来生成决策树,因此既可以解决分类问题,也可以解决回归问题。从名字中可以看出,随机森林是用随机的方式构建的一个森林,而这个森林是由很多的相互不关联的决策树组成。实时上随机森林从本质上属于机器学习的一个很重要的分支叫做集成学习。集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成单预测,因此优于任何一个单分类的做出预测。   所以理论上,随机森林的表现一般要优于单一的决策树,因为随机森林的结果是通过多个决策树结果投票来决定最后的结果。简单来说,随机森林中每个决策树都有一个自己的结果,随机森林通过统计每个决策树的结果,选择投票数最多的结果作为其最终结果。我觉得中国一句谚语很形象的表达了随机森林的运作模式,就是“三个臭皮匠,顶个诸葛亮”。
                                           我有一批100条的数据,通过颜色、长度、甜度、生长地方和水果类别,那么我要预测在某种颜色、长度、甜度和生长地方的水果究竟是什么水果,随机森林要怎么做呢?
   这里的抽样是指的在这批水果中,有放回地抽样,比如我要生成3个决策树来预测水果种类,那么每棵树要抽样50条数据来生成,每棵树抽取数据后数据要放回,下一棵树抽取数据仍然要从100条数据里面抽取。这种方法就叫做 bootstrap重采样技术 。
   每棵树利用抽取的样本生成一棵树,值得注意的是,由于采用的是CART算法,因此生成的是二叉树,并且可以处理连续性数据。如果每个样本的特征维度为M,像以上提到的数据,样本特征维度5,指定一个常数m<<M,随机地从5个特征中选取m个特征子集 (这一点非常重要,这也是随机森林的随机这个名字的来源,因此这样才能保证生成的决策树不同) ,每次树进行分裂时,从这m个特征中选择最优的,并且每棵决策树都最大可能地进行生长而不进行剪枝。   此时,一颗茂盛的决策树就生成了。
   根据3颗决策树的结果,如果是连续型的数据最终需要求均值获得结果,如果是分类型的数据最后求众数获得结果。
   1)正如上文所述,随机森林算法能解决分类与回归两种类型的问题,并在这两个方面都有相当好的估计表现
   2)随机森林对于高维数据集的处理能力令人兴奋,它可以处理成千上万的输入变量,并确定最重要的变量,因此被认为是一个不错的降维方法。此外,该模型能够输出变量的重要性程度,这是一个非常便利的功能
   3)在对缺失数据进行估计时,随机森林是一个十分有效的方法。就算存在大量的数据缺失,随机森林也能较好地保持精确性
   4)当存在分类不平衡的情况时,随机森林能够提供平衡数据集误差的有效方法
   5)模型的上述性能可以被扩展运用到未标记的数据集中,用于引导无监督聚类、数据透视和异常检测
   6)随机森林算法中包含了对输入数据的重复自抽样过程,即所谓的bootstrap抽样。这样一来,数据集中大约三分之一将没有用于模型的训练而是用于测试,这样的数据被称为out of bag samples,通过这些样本估计的误差被称为out of bag error。研究表明,这种out of bag方法的与测试集规模同训练集一致的估计方法有着相同的精确程度,因此在随机森林中我们无需再对测试集进行另外的设置。
   1)随机森林在解决回归问题时并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续型的输出。当进行回归时,随机森林不能够作出超越训练集数据范围的预测,这可能导致在对某些还有特定噪声的数据进行建模时出现过度拟合。
   2)对于许多统计建模者来说,随机森林给人的感觉像是一个黑盒子——你几乎无法控制模型内部的运行,只能在不同的参数和随机种子之间进行尝试。

7. 随机森林算法是什么?

随机森林算法是以决策树为基学习器构建bagging的基础上,进一步在决策树的训练过程中引入随机属性的算法。
在机器学习中,随机森林是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。 Leo Breiman和Adele Cutler发展出推论出随机森林的算法。 
而 "Random Forests" 是他们的商标。 这个术语是1995年由贝尔实验室的Tin Kam Ho所提出的随机决策森林(random decision forests)而来的。这个方法则是结合 Breimans 的 "Bootstrap aggregating" 想法和 Ho 的"random subspace method"以建造决策树的集合。

随机森林算法之根据下列算法而建造每棵树:
用N来表示训练用例(样本)的个数,M表示特征数目。
输入特征数目m,用于确定决策树上一个节点的决策结果;其中m应远小于M。
从N个训练用例(样本)中以有放回抽样的方式,取样N次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。
对于每一个节点,随机选择m个特征,决策树上每个节点的决定都是基于这些特征确定的。根据这m个特征,计算其最佳的分裂方式。
每棵树都会完整成长而不会剪枝,这有可能在建完一棵正常树状分类器后会被采用)。

随机森林算法是什么?

8. 数据挖掘实战之随机森林算法使用

 阅读路线:
   近来有同学问道,有没有数据挖掘的案例可以来练习下,主要是来通过案例来知道算法是如何使用的。
   下面就以 港股打新 这个金融项目为例,来做个预测,先来说下什么是打新;打新,就是用资金参与新股申购,如果中签的话,就买到了即将上市的股票。
   此次分析的目的是为了深入打新数据,找到最优算法,挖掘出影响打新的关键因素,找到可能要破发的新股,从而减少新股破发的风险,提高盈利。
   打新的本质,也即是在股票上市后卖出,赚取其中的差价。一般在买到的第一天就会卖掉,当然第一天上升的股票有涨有跌,为了能够减少风险,会根据历史数据来做个预判,这里把涨幅10%以下记为0,涨幅10%以上记为1,很明显这也是二分类的预测问题
   对于本项目而言,最终的评价标准是要求在精确度达到97%的情况下,最大化召回率。这里是要求尽可能提高召回率,自己本身对风险比较厌恶,宁可错杀,也不会愿意申购上市就要的破发的新股
   对于评价标准,一般用的是PR曲线和ROC曲线。ROC曲线有一个突出优势,就是不受样本不均衡的影响 ROC曲线不受样本不均衡问题的影响 
    1.数据总体情况 
   港股数据主要来自两个方面, 利弗莫尔证券数据 和 阿思达克保荐人近两年数据 ,处理之后是这样的:   
                                           
   数据一共有17个特征,除了目标变量is_profit,还有16个特征。
   
   
                                           以上的数据指标可以梳理为两类,一类是股票相,如 关,一类是保荐人指标,
                                            2.数据处理方面不用管    一般特征工程主要从以下方面来进行:衍生特征、异常值处理、缺失值处理、连续特征离散化、分类变量one-hot-encode、标准化等,本篇文章主要讲解随机森林算法使用,暂不对特征工程做过多的展示了
   从 使用随机森林默认的参数 带来的模型结果来看,auc指标是0.76,效果还可以。
   为了更好的理解上述,这里有几个知识点需要来解释下:
   返回的是一个n行k列的数组,第i行第j列上的数值是模型预测第i个预测样本的标签为j的概率。所以每一行的和应该等于1;本文中predict_proba(x_test)[:,1]返回的是标签为0的概率。
    (a).混淆矩阵 
   混淆矩阵如下图分别用”0“和”1“代表负样本和正样本。FP代表实际类标签为”0“,但预测类标签为”1“的样本数量。其余,类似推理。
                                            (b).假正率和真正率 
   假正率(False Positive Rate,FPR)是实际标签为”0“的样本中,被预测错误的比例。真正率(True Positive Rate,TPR)是实际标签为”1“的样本中,被预测正确的比例。其公式如下:
                                            (3).ROC曲线 
   下图的黑色线即为ROC曲线,ROC曲线是一系列threshold下的(FPR,TPR)数值点的连线。此时的threshold的取值分别为测试数据集中各样本的预测概率。但,取各个概率的顺序是从大到小的。然后也就是有了不同的RPR、TPR,且测试样本中的数据点越多,曲线越平滑:
                                           AUC(Area Under roc Cure),顾名思义,其就是ROC曲线下的面积,在此例子中AUC=0.62。AUC越大,说明分类效果越好。
   下面我们来看看RF重要的Bagging框架的参数,主要有以下几个:
    (1) n_estimators: 
   也就是最大的弱学习器的个数。一般来说n_estimators太小,容易欠拟合,n_estimators太大,计算量会太大,并且n_estimators到一定的数量后,再增大n_estimators获得的模型提升会很小,所以一般选择一个适中的数值。默认是100。
    (2) oob_score: 
   即是否采用袋外样本来评估模型的好坏。默认识False。个人推荐设置为True,因为袋外分数反应了一个模型拟合后的泛化能力。
    (3) criterion: 
   即CART树做划分时对特征的评价标准。分类模型和回归模型的损失函数是不一样的。分类RF对应的CART分类树默认是基尼系数gini,另一个可选择的标准是信息增益。回归RF对应的CART回归树默认是均方差mse,另一个可以选择的标准是绝对值差mae。一般来说选择默认的标准就已经很好的。
   从上面可以看出,RF重要的框架参数比较少,主要需要关注的是 n_estimators ,即RF最大的决策树个数。
   下面我们再来看RF的决策树参数,它要调参的参数如下:
    (1) RF划分时考虑的最大特征数max_features: 
   
   
                                           
                                                                                    (2) 决策树最大深度max_depth: 
   默认可以不输入,如果不输入的话,决策树在建立子树的时候不会限制子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。
    (3) 内部节点再划分所需最小样本数min_samples_split: 
   这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。
    (4) 叶子节点最少样本数min_samples_leaf: 
   这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。
    (5)叶子节点最小的样本权重和min_weight_fraction_leaf: 
   这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。 默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。
    (6) 最大叶子节点数max_leaf_nodes: 
   通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。
    (7) 节点划分最小不纯度min_impurity_split:    这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差)小于这个阈值,则该节点不再生成子节点。即为叶子节点 。一般不推荐改动默认值1e-7。
   上面决策树参数中最重要的包括最大特征数 max_features , 最大深度 max_depth , 内部节点再划分所需最小样本数 min_samples_split 和叶子节点最少样本数 min_samples_leaf 
   GridSearchCV的名字其实可以拆分为两部分,GridSearch和CV,即网格搜索和交叉验证。这两个名字都非常好理解。网格搜索,搜索的是参数,即在指定的参数范围内,按步长依次调整参数,利用调整的参数训练学习器,从所有的参数中找到在验证集上精度最高的参数,这其实是一个训练和比较的过程。
   GridSearchCV可以保证在指定的参数范围内找到精度最高的参数,但是这也是网格搜索的缺陷所在,他要求遍历所有可能参数的组合,在面对大数据集和多参数的情况下,非常耗时。
   通过RF框架以及RF决策树参数能够了解到重点需要调节以下的参数
   主要需要关注的是 n_estimators ,即RF最大的决策树个数。
   决策树参数中最重要的包括最大特征数 max_features , 最大深度 max_depth , 内部节点再划分所需最小样本数 min_samples_split 和叶子节点最少样本数 min_samples_leaf 
   输出结果为:
    6.3最佳的弱学习器迭代次数,接着我们对决策树最大深度max_depth和内部节点再划分所需最小样本数min_samples_split进行网格搜索 
   输出结果
    6.4最大特征数max_features做调参 
   输出结果:
    6.5根据模型最佳参数进行测试 
   输出结果:0.7805947388486466,相比没有调参前,模型有不少的提高的,方便观察,用图形来看下ROC曲线图
                                            6.6观察模型的重要特征 
                                            6.7最大召回率 
   最后得出我们想要的结果,精准率在 0.97 下,召回率 0.046 
    参考文章: 
    1.sklearn中predict_proba的用法例子 
    2.Python机器学习笔记 Grid SearchCV(网格搜索) 
    3.scikit-learn随机森林调参小结 
    4.ROC曲线和AUC值的计算 
最新文章
热门文章
推荐阅读