随机森林算法总结

随机森林算法

个体学习器

个体学习器又称为基学习器(base learner),由单个的学习算法训练数据得到,比如“决策树算法”,“神经网络算法”等等。在不正式的说法下,基学习器,弱学习器,弱分类器,个体学习器说的都是一个东西。

集成学习

常言道:“一个篱笆三个桩,一个好汉三个帮”。集成学习模型便是综合考量多个学习器的预测结果,从而做出决策。

集成学习的核心

如何产生“好而不同”的个体学习器,并准确性和多样性上做出最好的选择,正是集成学习的核心

假设现在用5个个体学习器做集成,最终结果用投票法产生,即少数服从多数。当个体学习器差异性不足的话,考虑一个极端例子,5个个体学习器都是由同一个学习器,复制而来,那么,5个学习器的预测结果和一个学习器预测结果完全相同,就达不到集成学习的目的了。因此,个体学习器应该“好而不同”,既要保证个体学习器的“准确性”,还要保证不同学习器之间的“多样性”。然而,准确性和多样性是冲突,在准确性和多样性上如何选择,才是集成学习需要解决的问题。

集成学习分类

集成学习分两种:

(1)模型之间彼此存在依赖关系,按一定的次序搭建多个分类模型,一般后一个模型的加入都需要对现有的集成模型有一定贡献,进而不断提高更新过后的集成模型性能,并借助多个弱分类器搭建出强分类器。代表有Boosting(AdaBoost)算法。该算法与第一种的随机森林主要区别在于每一颗决策树在生成的过程中都会尽可能降低模型在训练集上的拟合或训练误差

(2)模型之间彼此不存在依赖关系,彼此独立。利用相同的训练数据同时搭建多个独立的分类模型,然后通过投票的方式,以少数服从多数的原则做出最终的分类决策。例如:Bagging随机森林(Random Forest).

Boosting

Boosting是一族可将弱学习器升为强学习器算法。这类算法的工作机制类似:

(1)先从初始训练集训练出一个基学习器

(2)在根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续得到最大的关注。

(3)然后基于调整后的样本分布来训练下一个基学习器;

(3)如此重复进行,直至基学习器数目达到实现指定的值T为止。

(4 )再将这T个基学习器进行加权结合得到集成学习器。

Boosting算法的著名代表就是Adaboost算法。

因此,对于Boosting算法,存在两个问题:

  1. 在每一轮中如何调整训练集,使训练的弱分类器得以进行;(调整样本权值)
  2. 如何将各个弱分类器联合起来形成强分类器。(调整模型权值)

Bagging

Bagging基本流程:通过自助采样,采出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,在将这些基学习器进行组合。

在对预测输出进行结合的时候,Bagging通常对分类任务使用简单投票法,对回归任务进行简单的平均法。但是如果投票个数一致,则最简单的做法是随机选择一个类别,当然也可以进一步考察学习器投票的置信度来确定最终的分类。流程如下:
随机森林算法总结_第1张图片

Bootstrap sampling自助采样

模型的评估方法中有留一法(将数据集划分为两个互不相交的集合,一个做测试集,一个做训练集)和交叉验证方法(将数据分成k个大小相似互不相交的子集,每次使用k-1个子集做训练集,剩下的一个子集做测试集,以此循环进行k次的训练和测试,最后返回k次测试结果的均值。)

但是上述两种方法中都保留了一部分样本用于测试,所以实际模型所使用的训练集比源数据都要小,因此就会引入一些因训练样本规模不同而导致的估计偏差。另外一方面留一法受训练样本影响较小,但是计算复杂度又太高。因此为了解决减少训练样本规模不同造成的影响,同时还能比较高效地进行测试集的评估。

自助法就是很好的解决方案。

boostrap抽样
随机森林算法总结_第2张图片

随机森林

随机森林就是建立很多决策树,组成一个决策树的“森林”,通过多棵树投票来进行决策。这种方法能够有效地提高对新样本的分类准确度。

随机森林在以决策树为基学习器构建Bagging集成(样本的随机选取)的基础上,进一步在决策树的训练过程中引入随机属性选择。具体来说,传统决策树在选择划分属性时是在当前节点的属性集合(假设有d个属性)中选择一个最优属性;而在RF随机森林中,对基决策树的每个节点,先从该节点的属性集合中随机选择一个包含K个属性的子集,然后在从这个子集中选择一个最优属性用于划分。K=d就是传统决策树,K=1则是随机选取一个属性用于划分,一般情况

随机森林的步骤

首先,对样本数据进行有放回的抽样,得到多个样本集。具体来讲就是每次从原来的N个训练样本中有放回地随机抽取N个样本(包括可能重复样本)。

然后,从候选的特征中随机抽取m个特征,作为当前节点下决策的备选特征,从这些特征中选择最好地划分训练样本的特征。用每个样本集作为训练样本构造决策树。单个决策树在产生样本集和确定特征后,使用CART算法计算,不剪枝。

最后,得到所需数目的决策树后,随机森林方法对这些树的输出进行投票,以得票最多的类作为随机森林的决策。

说明:

(1)随机森林的方法即对训练样本进行了采样,又对特征进行了采样,充分保证了所构建的每个树之间的独立性,使得投票结果更准确。
随机森林算法总结_第3张图片

(2)随机森林的随机性体现在每棵树的训练样本是随机的,树中每个节点的分裂属性也是随机选择的。有了这2个随机因素,即使每棵决策树没有进行剪枝,随机森林也不会产生过拟合的现象。

随机森林中有两个可控制参数:

(1)森林中树的数量(一般选取值较大)

(2)抽取的属性值m的大小。

随机森林的优点

随机森林简单、容易实现、计算开销小,被誉为“代表集成学习计数水平的方法”。可以看出随机森林只是对Bagging做了很小的改动。Bagging的多样性只是体现在样本的随机性,随机森林的基学习器的多样性不仅来自于样本的随机性,还来自于属性的随机性。随机森林随着学习器数目的增加,随机森林通常会收敛到更低的泛化误差。

(1)分类结果更加准确

(2)可以处理高维度的属性,并且不用做特征选择

(3)即使有很大部分数据遗失,仍可以维持高准确度

(4)训练效率优于Bagging

(5)随机性只需要考虑一个属性子集,Bagging需要考察所有属性。

(6)容易实现并行化计算

(7)在训练过程中,能够检测到属性之间的相互影响

随机森林缺点

  1. 随机森林在解决回归问题时,并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续的输出。当进行回归时,随机森林不能够做出超越训练集数据范围的预测,这可能导致在某些特定噪声的数据进行建模时出现过度拟合。(PS:随机森林已经被证明在某些噪音较大的分类或者回归问题上回过拟合)。
  2. 对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类。(处理高维数据,处理特征遗失数据,处理不平衡数据是随机森林的长处)。

结合策略

平均法与加权平均法

  • 简单平均法是加权平均法分特例
  • 加权平均法的权重一般是从训练数据中学习而来
  • 个体学习器性能相差较大时使用加权平均法,相近的话常使用简单平均法

投票法

  • 绝对多数投票法:学习器的分类票数超过半数,则预测为该标记,否则拒绝预测。
  • 相对多数投票法:预测为得票最多的标记,如同时有多个得票最高,择随机抽取一个。
  • 加权投票法:与加权平均法类似

学习法(Stacking)

首先从初始数据集中训练出初级学习器,然后生成一个新数据集用于训练次级学习器
随机森林算法总结_第4张图片

这个模型的特点就是通过使用第一阶段(level 0)的预测作为下一层预测的特征,比起相互独立的预测模型能够有更强的非线性表述能力,降低泛化误差。它的目标是同时降低机器学习模型的Bias-Variance。

sklearn参数

这部分参照:https://www.cnblogs.com/pinard/p/6160412.html

  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。一般来说选择默认的标准就已经很好的。

-----------------------------------------------------------------------------------------------------------------------------------

  1. RF划分时考虑的最大特征数max_features: 可以使用很多种类型的值,默认是"auto",意味着划分时最多考虑N‾‾√N个特征;如果是"log2"意味着划分时最多考虑log2Nlog2N个特征;如果是"sqrt"或者"auto"意味着划分时最多考虑N‾‾√N个特征。如果是整数,代表考虑的特征绝对数。如果是浮点数,代表考虑特征百分比,即考虑(百分比xN)取整后的特征数。其中N为样本总特征数。一般我们用默认的"auto"就可以了,如果特征数非常多,我们可以灵活使用刚才描述的其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。

  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”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。

上面决策树参数中最重要的包括最大特征数max_features, 最大深度max_depth, 内部节点再划分所需最小样本数min_samples_split和叶子节点最少样本数min_samples_leaf。

应用场景

随机森林既可以用于分类,也可以用于回归。一般适用于数据维度较低,同时对准确性要求较高的场景中。

你可能感兴趣的:(机器学习)