【机器学习】集成学习的概念与随机森林算法梳理

1. 集成学习概念

“三个臭皮匠,顶个诸葛亮”思想
“弱可学习”等价于“强可学习” —— Schapire
可以理解为就是指采用多个分类器对数据集进行预测,从而提高整体分类器的泛化能力。 
集成学习有两个流派
一个是boosting派系,它的特点是各个弱学习器之间有依赖关系。
另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合。

2. 个体学习器概念

又称“基学习器”,感觉只有在集成学习里提到,可以是决策树、神经网络、朴素贝叶斯法、支持向量机等等
单个学习器可能效果并不好,所以需要集成学习

3. boosting 

可将弱学习器提升为强学习器的算法
前一个学习器学习错误的样本在下次学习中将会得到“特殊关照”,拟合残差思想
代表性算法:Adaboost
以m个样本的二分类为例,初始每个样本的权重W_mi为1/m
训练一个基学习器T0,计算错误率err = S W_mi*[G(xi)≠yi]
计算该学习器的权重W_T0 = 1/2 * (ln(1-err)/err)
重新计算每个样本的权重:分类对的W_mi(新一轮) = W_mi(上一轮)*exp(-W_T0)/sum_W 
重新计算每个样本的权重:分类错的W_mi(新一轮) = W_mi(上一轮)*exp(W_T0)/sum_W
再根据新的训练集训练基学习器T1
如此循环

4. bagging

又称装袋算法,算法思想是训练多个“好而不同”的基学习器进行投票决定该样本属于哪个类(回归的话,输出各学习器输出的平均值)
假如有m个样本,有放回选取m个集合D,每次不被选到的概率为(1-1/m),当m趋于无穷时候,不被选到的概率为1/e,约36.8%
不被称为袋外数据,可以用于交叉验证
用集合D训练基学习器T0
如此反复,得到N个基学习器,集成为强学习器,通过投票、平均法(回归)输出最终结果

5. 结合策略(平均法,投票法,学习法)

平均法:
简单平均、加权平均
个体学习器性能相差较大时宜使用加权平均法,相近用简单平均法。加权平均容易过拟合
投票法:
相对多数投票法:输出得票最多的预测
绝对多数投票法:得票最多超过50%的输出,否则拒绝预测
加权投票法:给每个分类器预测结果一个权重再求和,最大的输出

6. 随机森林思想

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

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

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

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

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

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

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

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

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


7. 随机森林的推广

(1)extra trees:样本集不抽样,直接使用原样本集。分裂的时候随机选择特征,相较于RF,每棵树的规模更大,但是进一步减小了方差,增加了bias

(2)Totally Random Trees Embedding:根据拥有某特征的样本x在不同树的叶子结点号,给数据升维


8. 优缺点

优点:

    (1) 训练可以高度并行化,对于大数据时代的大样本训练速度有优势。

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

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

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

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

 (6) 对部分特征缺失不敏感。

缺点:

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

    (2)对小样本数据或者低维(特征少)数据可能不能产生最好的分类

9. sklearn参数

1.框架参数

    首先我们关注于RF的Bagging框架的参数。这里可以和GBDT对比来学习。在scikit-learn 梯度提升树(GBDT)调参小结中我们对GBDT的框架参数做了介绍。GBDT的框架参数比较多,重要的有最大迭代器个数,步长和子采样比例,调参起来比较费力。但是RF则比较简单,这是因为bagging框架里的各个弱学习器之间是没有依赖关系的,这减小的调参的难度。换句话说,达到同样的调参效果,RF调参时间要比GBDT少一些。

    下面我来看看RF重要的Bagging框架的参数,由于RandomForestClassifier和RandomForestRegressor参数绝大部分相同,这里会将它们一起讲,不同点会指出。

    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最大的决策树个数。

2.RF决策树参数

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

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

    7) 节点划分最小不纯度min_impurity_split:  这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差)小于这个阈值,则该节点不再生成子节点。即为叶子节点 。一般不推荐改动默认值1e-7。

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

这部分转自参考【5】


10.应用场景

数据维度不是很高(也不能太低..毕竟要随机抽取特征),而对准确性有较高要求时。

因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。

参考

【1】李航,统计学习方法

【2】https://www.cnblogs.com/maybe2030/p/4585705.html

【3】https://www.jianshu.com/p/a779f0686acc

【4】https://www.cnblogs.com/pinard/p/6156009.html

【5】https://blog.csdn.net/nowfuture/article/details/81745177

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章