机器学习——随机森林

1. 集成学习

1.1 概述

集成学习并不是一个单独的机器学习算法,它是通过构建并结合多个机器学习器来完成学习任务。使用多个个体学习器构建一个强学习器,也就是我们常说的“三个臭皮匠,顶个诸葛亮”。集成学习可以用于分类问题集成回归问题集成特征选取集成异常点检测集成等等

1.2 个体学习器

个体学习器有两种:

  • 同质:比如都是决策树个体学习器,或者都是神经网络个体学习器。
  • 异质:比如对训练集采用支持向量机个体学习器,逻辑回归个体学习器和朴素贝叶斯个体学习器来学习,再通过某种结合策略来确定最终的分类强学习器。

一般我们常说的集成学习的方法都是指的同质个体学习器。而同质个体学习器使用最多的模型是CART决策树和神经网络。同质个体学习器按照个体学习器之间是否存在依赖关系可以分为两类:

  • 第一个是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是boosting系列算法
  • 第二个是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是bagging和随机森林(Random Forest)系列算法

1.3 强学习器

个体学习器通过某种结合策略生成强学习器。

1.4 boosting(串行生成)

Boosting算法的工作机制:

  • 给训练集样本初始权重,训练出一个弱学习器1
  • 根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。
  • 调整权重后的训练集来训练弱学习器2
  • 如此重复进行,直到弱学习器数达到事先指定的数目T
  • 将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。

Boosting系列算法里最著名算法主要有AdaBoost算法和提升树(boosting tree)系列算法。提升树系列算法里面应用最广泛的是梯度提升树(Gradient Boosting Tree)。AdaBoost和提升树算法的原理在后面的文章中会专门来讲。

1.5 bagging(并行生成)

Bagging算法工作机制:

  • 对原始训练集是通过随机采样得到采样集1。
  • 重复T次随机采样,我们就可以得到T个采样集
  • 对于这T个采样集训练出T个弱学习器
  • T个弱学习器通过集合策略来得到最终的强学习器。
    这里的随机采样有必要做进一步的介绍,这里一般采用的是自助采样法(Bootstrap sampling),即有放回采样。

随机森林是bagging的一个特化进阶版
随机:随机采样训练集+随机选择特征
森林:许多决策树

1.6 结合策略

1.6.1 平均法(常用于回归)

  • 简单平均
    对于若干个弱学习器的输出进行平均得到最终的预测输出。
  • 加权平均
    如果每个个体学习器有一个权重w,则对输出赋予权重,再取平均。

1.6.2 投票法(常用于分类)

  • 相对多数投票
    少数服从多数,如果不止一个类别获得最高票,则随机选择一个做最终类别
  • 绝对多数投票法
    不光要求获得最高票,还要求票过半数。否则会拒绝预测。
  • 加权投票
    每个弱学习器的分类票数要乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别。

1.6.3 学习法(stacking)

stacking融合

扫描二维码关注公众号,回复: 4525344 查看本文章

2. 随机森林

2.1 随机森林原理

随机森林(RF)是Bagging算法的进化版,其思想仍然是bagging,但是进行了独特的改进。
RF使用的是CART决策树作为弱学习器
在使用决策树的基础上,RF对决策树的建立做了改进
普通的CART决策树:在节点上所有的n个样本特征中选择一个最优的特征来做决策树的左右子树划分
RF的CART决策树随机选择节点上的一部分样本特征,这个数字小于 n n ,假设为 n s u b n_{sub} ,然后在这些随机选择的 n s u b n_{sub} 个样本特征中,选择一个最优的特征来做决策树的左右子树划分。这样进一步增强了模型的泛化能力。
如果 n s u b n_{sub} ,则此时RF的CART决策树和普通的CART决策树没有区别。 n s u b n_{sub} 越小,则模型约健壮,当然此时对于训练集的拟合程度会变差。也就是说 n s u b n_{sub} 越小,模型的方差会减小,但是偏倚会增大。在实际案例中,一般会通过交叉验证调参获取一个合适的 n s u b n_{sub} 的值。

2.2 随机森林的推广

2.2.1 extra trees

  • extra trees一般不采用随机采样,即每个决策树采用原始训练集。
  • extra trees比较的激进,他会随机的选择一个特征值来划分决策树。

由于随机选择了特征值的划分点位,而不是最优点位,这样会导致生成的决策树的规模一般会大于RF所生成的决策树。也就是说,模型的方差相对于RF进一步减少,但是偏倚相对于RF进一步增大在某些时候,extra trees的泛化能力比RF更好。

2.2.2 Totally Random Trees Embedding

Totally Random Trees Embedding(以下简称 TRTE)是一种非监督学习数据转化方法

  • 低维的数据集映射到高维,从而让映射到高维的数据更好的运用于分类回归模型(类比支持向量机中的核方法)

举个栗子
比如我们有3颗决策树,每个决策树有5个叶子节点,某个数据特征x划分到第一个决策树的第2个叶子节点,第二个决策树的第3个叶子节点,第三个决策树的第5个叶子节点。则x映射后的特征编码为(0,1,0,0,0, 0,0,1,0,0, 0,0,0,0,1), 有15维的高维特征。这里特征维度之间加上空格是为了强调三颗决策树各自的子编码。

2.2.3 Isolation Forest

Isolation Forest(以下简称IForest)是一种异常点检测的方法。它也使用了类似于RF的方法来检测异常点。

  • 采样个数要远远小于训练集个数,我们的目的是异常点检测,只需要部分的样本我们一般就可以将异常点区别出来了
  • 随机选择一个划分特征,对划分特征随机选择一个划分阈值。
  • IForest一般会选择一个比较小的最大决策树深度max_depth,原因同样本采集,用少量的异常点检测一般不需要这么大规模的决策树
    异常点的判断:
    将测试样本点x拟合到T颗决策树。计算在每颗决策树上该样本的叶子节点的深度ht(x)。,从而可以计算出平均高度h(x)。此时我们用下面的公式计算样本点x的异常概率:
    s ( x , m ) = 2 h ( x ) c ( m ) s(x,m)=2^{-\frac{h(x)}{c(m)}}
    c ( m ) = 2 l n ( m 1 ) + ξ 2 m 1 m , ξ c(m)=2ln(m-1)+\xi -2\frac{m-1}{m} ,\xi为欧拉常数
    s ( x , m ) [ 0 , 1 ] , 1 s(x,m)取值范围是[0,1],取值越接近于1,则是异常点的概率也越大。

2.3 随机森林优缺点

RF的主要优点有:

  1. 训练可以高度并行化,对于大数据时代的大样本训练速度有优势。个人觉得这是的最主要的优点。
  2. 由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型。
  3. 在训练后,可以给出各个特征对于输出的重要性
  4. 由于采用了随机采样,训练出的模型的方差小,泛化能力强。
  5. 相对于Boosting系列的Adaboost和GBDT, RF实现比较简单。
  6. 对部分特征缺失不敏感。

RF的主要缺点有:

  1. 在某些噪音比较大的样本集上,RF模型容易陷入过拟合。
  2. 取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果。

2.4 Sklearn 参数

RF的Sklearn参数分为RF的Bagging框架的参数RF的决策树参数

2.5 RF的Bagging框架的参数

参数 解释 默认值
n_estimators 也就是弱学习器的最大迭代次数,或者说最大的弱学习器的个数。一般来说n_estimators太小,容易欠拟合,n_estimators太大,计算量会太大,并且n_estimators到一定的数量后,再增大n_estimators获得的模型提升会很小,所以一般选择一个适中的数值 100
oob_score 是否采用袋外样本来评估模型的好坏,袋外分数反应了一个模型拟合后的泛化能力。 False
criterion CART树做划分时对特征的评价标准。分类模型和回归模型的损失函数是不一样的。分类RF对应的CART分类树默认是基尼系数gini,另一个可选择的标准是信息增益。回归RF对应的CART回归树默认是均方差mse,另一个可以选择的标准是绝对值差mae。一般来说选择默认的标准就已经很好的。

2.6 RF的决策树参数

参数 解释 默认值
max_features RF划分时考虑的最大特征数, 可以使用很多种类型的值,默认是"auto",意味着划分时最多考虑N−−√个特征;如果是"log2"意味着划分时最多考虑log2N个特征;如果是"sqrt"或者"auto"意味着划分时最多考虑N−−√个特征。如果是整数,代表考虑的特征绝对数。如果是浮点数,代表考虑特征百分比,即考虑(百分比xN)取整后的特征数。其中N为样本总特征数。一般我们用默认的"auto"就可以了,如果特征数非常多,我们可以灵活使用刚才描述的其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。 “auto”
max_depth 决策树最大深度,默认可以不输入,如果不输入的话,决策树在建立子树的时候不会限制子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。 None
min_samples_split 内部节点再划分所需最小样本数, 这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。 默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。 2
min_samples_leaf 叶子节点最少样本数 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值 1
min_weight_fraction_leaf 叶子节点最小的样本权重这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。 默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。 0
max_leaf_nodes 最大叶子节点数 通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。 None
min_impurity_split 节点划分最小不纯度这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差)小于这个阈值,则该节点不再生成子节点。即为叶子节点 。一般不推荐改动默认值1e-7。 1e-7

猜你喜欢

转载自blog.csdn.net/Heitao5200/article/details/85010074
今日推荐