【任务一 随机森林算法梳理】
集成学习简单理解就是指采用多个分类器对数据集进行预测,从而提高整体分类器的泛化能力。换个角度考虑,训练完成之后就可以看成是单独的一个”假设”(或模型),只是该”假设”不一定是在原”假设”空间里的。因此,Ensemble方法具有更多的灵活性。理论上来说,Ensemble方法也比单一模型更容易过拟合。但是,实际中有一些方法(尤其是Bagging)也倾向于避免过拟合
集成学习有三个流派:
包括了常用的应用:Adaboost、GBDT、xgboost等。
全称为Bootstrap aggregating,装袋法。
1.划分训练数据集为两个不相交的集合。
2. 在第一个集合上训练多个学习器。
3. 在第二个集合上测试这几个学习器
4. 把第三步得到的预测结果作为输入,把正确的回应作为输出,训练一个高层学习器,
个体学习器的基本内容是,子分类器,基于当前数据而建立的简单弱分类器。
Boosting是一种用来提高弱分类算法准确度的方法,这种方法通过构造一个预测函数系列,然后以一定的方式将他们组合成一个预测函数。
Boosting:
原理:寻找多个识别率不是很高的弱分类算法比寻找一个识别率很高的强分类算法要容易得多,比如AdaBoost 算法的任务就是完成将容易找到的识别率不高的弱分类算法提升为识别率很高的强分类算法,这也是 AdaBoost 算法的核心指导思想所在;
如果算法完成了这个任务,那么在分类时,只要找到一个比随机猜测略好的弱分类算法,就可以将其提升为强分类算法,而不必直接去找通常情况下很难获得的强分类算法。通过产生多分类器最后联合的方法提升弱分类算法,让它变为强的分类算法,也就是给定一个弱的学习算法和训练集,在训练集的不同子集上,多次调用弱学习算法,最终按加权方式联合多次弱学习算法的预测结果得到最终学习结果。包含以下2 点:
1、样本的权重
2、基分类器的错误率:
基分类器的权重:Wt = F( e) ,由基分类器的错误率计算他的权重。
从偏差和方差的角度上进行考虑:
boosting从优化角度来看,是用forward-stagewise这种贪心法去最小化损失函数。
例如,常见的AdaBoost即等价于用这种方法最小化exponential loss:。所谓forward-stagewise,就是在迭代的第n步,求解新的子模型f(x)及步长a(或者叫组合系数),来最小化,这里
是前n-1步得到的子模型的和。
因此boosting是在sequential地最小化损失函数,其bias自然逐步下降。
但由于是采取这种sequential、adaptive的策略,各子模型之间是强相关的,于是子模型之和并不能显著降低variance。
所以说boosting主要还是靠降低bias来提升预测精度。
样本选择上:
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
样例权重:
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
预测函数:
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
并行计算:
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
Bagging是一种用来提高学习算法准确度的方法,这种方法通过构造一个预测函数系列,然后以一定的方式将它们组合成一个预测函数。
Bagging要求“不稳定”(不稳定是指数据集的小的变动能够使得分类结果的显著的变动)的分类方法。比如:决策树,神经网络算法。
基本思想:
1.给定一个弱学习算法,和一个训练集;
2.单个弱学习算法准确率不高;
3.将该学习算法使用多次,得出预测函数序列,进行投票;
4.最后结果准确率将得到提高.
从偏差和方差的角度上进行考虑:
Bagging对样本重采样,对每一重采样得到的子样本集训练一个模型,最后取平均。
由于子样本集的相似性以及使用的是同种模型,因此各模型有近似相等的bias和variance(事实上,各模型的分布也近似相同,但不独立)。
由于,所以bagging后的bias和单个子模型的接近,一般来说不能显著降低bias。
另一方面,若各子模型独立,则有,此时可以显著降低variance。若各子模型完全相同,则,此时不会降低variance。
bagging方法得到的各子模型是有一定相关性的,属于上面两个极端状况的中间态,因此可以一定程度降低variance。
为了进一步降低variance,Random forest通过随机选取变量子集做拟合的方式de-correlated了各子模型(树),使得variance进一步降低。
(用公式可以一目了然:设有i.d.的n个随机变量,方差记为,两两变量之间的相关性为,则的方差为,bagging降低的是第二项,random forest是同时降低两项。
样本选择上:
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
样例权重:
Bagging:使用均匀取样,每个样例的权重相等;
预测函数:
Bagging:所有预测函数的权重相等。
并行计算:
Bagging:各个预测函数可以并行生成
4. 结合策略(平均法,投票法,学习法)
1.提高泛化性能
2.降低进入局部最小点的风险
3.扩大假设空间
适用范围:
1.绝对多数投票法:某标记超过半数;
2.相对多数投票法:预测为得票最多的标记,若同时有多个标记的票最高,则从中随机选取一个。
3.加权投票法:提供了预测结果,与加权平均法类似。
Stacking:先从初始数据集中训练出初级学习器,然后“生成”一个新数据集用于训练次级学习器。在新数据集中,初级学习器的输出被当做样例输入特征,初始样本的标记仍被当做样例标记。
1、什么是随机森林?
随机森林就是用随机的方式建立一个森林,在森林里有很多决策树组成,并且每一棵决策树之间是没有关联的。当有一个新样本的时候,我们让森林的每一棵决策树分别进行判断,看看这个样本属于哪一类,然后用投票的方式,哪一类被选择的多,作为最终的分类结果。在回归问题中,随机森林输出所有决策树输出的平均值。
(1)随机森林既可以用于分类,也可以用于回归。
(2)它是一种降维手段,用于处理缺失值和异常值。
(3)它是集成学习的重要方法。
2、两个随机抽取
(1)样本有放回随机抽取固定数目
(2)构建决策树时,特征随机抽取
解释:两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感)
3、随机森林算法是如何工作的?
在随机森林中,每一个决策树“种植”和“生长”的四个步骤:
(1)假设我们设定训练集中的样本个数为N,然后通过有重置的重复多次抽样获得这N个样本,这样的抽样结果将作为我们生成决策树的训练集;
(2)如果有M个输入变量,每个节点都将随机选择m(m (3)每棵决策树都最大可能地进行生长而不进行剪枝; (4)通过对所有的决策树进行加总来预测新的数据(在分类时采用多数投票,在回归时采用平均)。 4、随机森林的优缺点 5、重要参数 6、oob:袋外错误率 oob误分率是随机森林泛化误差的一个无偏估计,它的结果近似于需要大量计算的k折交叉验证。所以没有必要对它进行交叉验证或者用一个独立的测试集来获得误差的一个无偏估计。它可以在内部进行评估,也就是说在生成的过程中就可以对误差建立一个无偏估计。 当我们知道了oob的计算方法,我们可以通过选取不同的m,计算oob error,找出oob error最小时对应的m的值。这和交叉验证的思想非常的相似。 7、RF特征重要性的度量方法 (4)对随机森林中的特征变量按照特征重要性降序排序。 解释:用这个公式来度量特征重要性,原因是:给某个特征随机的加入噪声后,如果oob error增大,说明这个特征对样本分类的结果影响比较大,说明重要程度比较高。 8、RF特征选择 特征选择的步骤: 6. 随机森林的推广 我认为随机森林的一种推广方式包括了独立森林IForest。 7. 优缺点 优点: 缺点: class sklearn.ensemble.RandomForestClassifier(n_estimators=10, crite-rion=’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, bootstrap=True, oob_score=False, n_jobs=1, ran-dom_state=None, verbose=0, warm_start=False, class_weight=None) 其中关于决策树的参数: 关于随机森林特有的参数: 9.应用场景 可以用来做分类,也可以做回归。 参考文献(链接): http://dataunion.org/20769.html https://blog.csdn.net/u012102306/article/details/52228516 https://blog.csdn.net/weixin_38111819/article/details/79405984 https://blog.csdn.net/loveitlovelife/article/details/79398745?utm_source=blogxgwz9 https://blog.csdn.net/vfgbv/article/details/79403528
优点:
(1)在分类和回归都表现良好
(2)对高维数据的处理能力强,可以处理成千上万的输入变量,是一个非常不错的降维方法
(3)能够输出特征的重要程度
(4)有效的处理缺省值
随机森林分类效果(错误率)与两个因素有关:
(1)森林中任意两棵树的相关性:相关性越大,错误率越大;
(2)森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。
减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m(或者是范围),这也是随机森林唯一的一个参数。在学习如何选择参数前首先介绍oob的概念。
为了选择最优的m,这里需要利用的是袋外错误率oob(out-of-bag error)。我们知道,在构建每个决策树的时候,采用的是随机又放回的抽取,所以对于每棵树来说,都有一些样本实力没有参与树的生成,所以这些样本成为袋外样本,即oob。所以我们需要做一下oob估计:
(1)对每个样本,计算它作为oob样本的树对它的分类情况
(2)多数投票作为该样本的分类结果
(3)用误分个数占样本总数的比率作为随机森林的oob误分率
(1)对于每一棵决策树,计算其oob error_0
(2)选取一个特征,随机对特征加入噪声干扰,再次计算oob error_1
(3)特征的重要性=∑(oob error_1-oob error_0)/随机森林中决策树的个数
(5)然后重复以上步骤,直到选出m个特征。
首先特征选择的目标有两个:
1:找到与分类结果高度相关的特征变量。
2:选择出数目较少的特征变量并且能够充分的预测应变量的结果。
(1)对于每一棵决策树,计算其oob error
(2)随机的修改OOB中的每个特征xi的值,计算oob error_2,再次计算重要性
(3)按照特征的重要性排序,然后剔除后面不重要的特征
(4)然后重复以上步骤,直到选出m个特征。