高级算法梳理:task1随机森林算法梳理

集成学习的概念

集成学习(Ensemble Learning)通过构建并结合多个基学习器来完成学习任务,比如分类问题下,集成学习通过一定的方式组合若干个基分类器的预测结果来对问题进行更精准的预测,具有更高的鲁棒性和泛化能力

个体学习器的概念

由已有的学习算法从训练数据中学习产生的。是为了集成学习而产生的个体,通常有以下几种:

只包含同种类型的个体学习器,这样的集成是“同质”的(homogeneous)。同质集成中的个体学习器亦称为”基学习器“(base learning)。
集成也可包含不同类型的个体学习器,这样集成是”异质“的(heterogeneous)。相应的个体学习器,常称为”组件学习器“(component learning)或直接称为个体学习器。

boosting bagging的概念、异同点

Bagging:全称Bootstrap Aggregation。Bagging方法中每一个基学习器的数据来源,都是将整体样本和所有特征进行一种有放回的抽取。每个基学习器在“不同”的数据集中学习出一个模型,最后的预测结果通过所有基学习器共同决定。分类问题采用投票的方式,回归问题采用平均值的方式。

高级算法梳理:task1随机森林算法梳理_第1张图片
image.png

Boosting:用所有的数据去训练基学习器,每一个基学习器相互依赖,基于前面所有的学习器的结果,学习他们与真实值之间的残差,集中关注预测出错的地方,来形成一个新的学习器。是一种串行的学习方式。

高级算法梳理:task1随机森林算法梳理_第2张图片
image.png

Bagging和Boosting的区别:

样本选择:
Bagging: 训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

样例权重:
Bagging: 使用均匀取样,每个样例的权重相等。
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

预测函数:
Bagging: 所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

并行计算:
Bagging: 各个预测函数可以并行生成。
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

理解不同的结合策略(平均法,投票法,学习法)

平均法:简单平均、加权平均

适用范围:

规模大的集成,学习的权重较多加权平均法易导致过拟合

个体学习器性能相差较大时宜使用加权平均法,相近用简单平均法

投票法:

绝对多数投票法:某标记超过半数,也就是我们常说的要票过半数,否则就当会拒绝预测;
H(x)=\left\{\begin{array}{l}{c_{j}, \quad \text { if } \sum_{i=1}^{T} h_{i}^{j}(x)>0.5 \sum_{k=1}^{T} \sum_{i=1}^{T} h_{i}^{k}(x)} \\ {\text {reject,} \quad \text { otherwise. }}\end{array}\right.
相对多数投票法:预测为得票最多的标记,若同时有多个标记的票最高,则从中随机选取一个,也就是所谓的“少数服从多数”。

加权投票法:提供了预测结果,与加权平均法类似。

学习法:

对于学习法,代表方法是stacking,当使用stacking的结合策略时, 我们不是对弱学习器的结果做简单的逻辑处理,而是再加上一层学习器,也就是说,我们将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。
在这种情况下,我们将弱学习器称为初级学习器,将用于结合的学习器称为次级学习器。对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。

高级算法梳理:task1随机森林算法梳理_第3张图片
image.png

随机森林的思想

随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于集成学习方法。随机森林的名称中有两个关键词,一个是“随机”,一个就是“森林”。“森林”我们很好理解,一棵叫做树,那么成百上千棵就可以叫做森林了,这也是随机森林的主要思想--集成思想的体现。然而,bagging的代价是不用单棵决策树来做预测,具体哪个变量起到重要作用变得未知,所以bagging改进了预测准确率但损失了解释性。

“森林”容易理解,就是由很多“树”组成,那么“随机”体现在什么方面呢?

(1)训练集随机的选取:如果训练集大小为N,对于每棵树而言,随机且有放回地从训练集中的抽取N个训练样本(这种采样方式称为bootstrap sample方法),作为该树的训练集;这样保证了每颗树的训练集都不同,从而构建的树也不同

(2)特征的随机选取:从M个特征中选取m个特征,这样可以避免某个特征与分类结果具有强相关性,如果所有特征都选取,那么所有的树都会很相似,那样就不够“随机”了

另外还有一点,随机森林法构建树的时候不需要做额外的剪枝操作。个人理解:因为前两个“随机”操作,以及多颗树的建立,已经避免了过拟合现象,所以这种情况下,我们只需要让每棵树在它自己的领域内做到最好就可以了。

随机森林算法的预测性能与两个因素有关:

(1)森林中任意两棵树的相关性,相关性越强,则总体性能越容易差

(2)森林中每棵树的预测性能,每棵树越好,则总体性能越好

其实可以理解为要求“好而不同”。然而特征数m的选择越大,则相关性与个体性能都比较好,特征数m选择越小,则相关性与个体性能都更小,所以m的选择影响着随机森林的预测性能。

过程如下:

  1. 构建多个数据集

在包括N个样本的数据集中,采用有放回的抽样方式选择N个样本,构成中间数据集,然后在这个中间数据集的所有特征中随机选择几个特征,作为最终的数据集。以上述方式构建多个数据集;一般回归问题选用全部特征,分类问题选择全部特征个数的平方根个特征

  1. 为每个数据集建立完全分裂的决策树

利用CART为每个数据集建立一个完全分裂、没有经过剪枝的决策树,最终得到多棵CART决策树;

  1. 预测新数据

根据得到的每一个决策树的结果来计算新数据的预测值。

  • 回归问题:采用多棵树的平均值。
  • 分类问题:采用投票计数的方法,票数大的获胜,相同的随机选择。可以把树的棵树设置为奇数避免这一问题。

随机森林的推广

由于RF在实际应用中的良好特性,基于RF,有很多变种算法,应用也很广泛,不光可以用于分类回归,还可以用于特征转换,异常点检测等。下面对于这些RF家族的算法中有代表性的做一个总结。

4.1 extra trees

extra trees是RF的一个变种, 原理几乎和RF一模一样,有区别有:

对于每个决策树的训练集,RF采用的是随机采样bootstrap来选择采样集作为每个决策树的训练集,而extra trees一般不采用随机采样,即每个决策树采用原始训练集。

在选定了划分特征后,RF的决策树会基于基尼系数,均方差之类的原则,选择一个最优的特征值划分点,这和传统的决策树相同。但是extra trees比较的激进,他会随机的选择一个特征值来划分决策树。

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

4.2 Totally Random Trees Embedding

Totally Random Trees Embedding(以下简称 TRTE)是一种非监督学习的数据转化方法。它将低维的数据集映射到高维,从而让映射到高维的数据更好的运用于分类回归模型。我们知道,在支持向量机中运用了核方法来将低维的数据集映射到高维,此处TRTE提供了另外一种方法。

TRTE在数据转化的过程也使用了类似于RF的方法,建立T个决策树来拟合数据。当决策树建立完毕以后,数据集里的每个数据在T个决策树中叶子节点的位置也定下来了。比如我们有3颗决策树,每个决策树有5个叶子节点,某个数据特征x划分到第一个决策树的第2个叶子节点,第二个决策树的第3个叶子节点,第三个决策树的第5个叶子节点。则x映射后的特征编码为(0,1,0,0,0, 0,0,1,0,0, 0,0,0,0,1), 有15维的高维特征。这里特征维度之间加上空格是为了强调三颗决策树各自的子编码。

映射到高维特征后,可以继续使用监督学习的各种分类回归算法了。

4.3 Isolation Forest

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

对于在T个决策树的样本集,IForest也会对训练集进行随机采样,但是采样个数不需要和RF一样,对于RF,需要采样到采样集样本个数等于训练集个数。但是IForest不需要采样这么多,一般来说,采样个数要远远小于训练集个数?为什么呢?因为我们的目的是异常点检测,只需要部分的样本我们一般就可以将异常点区别出来了。

对于每一个决策树的建立, IForest采用随机选择一个划分特征,对划分特征随机选择一个划分阈值。这点也和RF不同。

另外,IForest一般会选择一个比较小的最大决策树深度max_depth,原因同样本采集,用少量的异常点检测一般不需要这么大规模的决策树。

对于异常点的判断,则是将测试样本点x拟合到T颗决策树。计算在每颗决策树上该样本的叶子节点的深度ht(x),从而可以计算出平均高度h(x)。此时我们用下面的公式计算样本点x的异常概率:

其中,m为样本个数。c(m)的表达式为:

s(x,m)的取值范围是[0,1],取值越接近于1,则是异常点的概率也越大。

随机森林的优缺点

RF的主要优点有:
训练可以高度并行化,对于大数据时代的大样本训练速度有优势。个人觉得这是的最主要的优点。

由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型。

在训练后,可以给出各个特征对于输出的重要性

由于采用了随机采样,训练出的模型的方差小,泛化能力强。

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

对部分特征缺失不敏感。

RF的主要缺点有:
在某些噪音比较大的样本集上,RF模型容易陷入过拟合。

取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果。

随机森林在sklearn中的参数解释

class sklearn.ensemble.RandomForestClassifier(n_estimators=100, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None)
  • n_estimators:基础分类器数量
  • criterion:划分衡量指标
  • max_depth:决策树最大深度
  • min_samples_split:决策树叶结点继续分裂最小样本数量
  • min_samples_leaf:决策树叶结点最小样本数量
  • min_weight_fraction_leaf:决策树叶结点最小加权样本数量
  • max_features:搜索划分时考虑的特征数量
  • max_leaf_nodes:决策树最大叶结点数量
  • min_impurity_decrease:决策树叶结点最小衡量指标提升
  • bootstrap:是否进行有放回取样
  • oob_score:是否通过未参加训练的样本估计模型效果
  • n_jobs:控制并行
  • random_state:随机种子
  • verbose:控制输出
  • warm_start:是否使用之前的输出
  • class_weight:类别权重
  • RandomForestRegressor类似

下面我们再来看RF的决策树参数,它要调参的参数基本和GBDT相同,如下:

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

1) 决策树最大深度max_depth: 默认可以不输入,如果不输入的话,决策树在建立子树的时候不会限制子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。

2) 内部节点再划分所需最小样本数min_samples_split: 这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。 默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。

3) 叶子节点最少样本数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。

随机森林的应用场景

数据维度相对低(几十维),同时对准确性有较高要求时。
因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。
参考:
https://www.cnblogs.com/burton/p/10460935.html
https://blog.csdn.net/weixin_39982211/article/details/88992095

你可能感兴趣的:(高级算法梳理:task1随机森林算法梳理)