机器学习集成模型之随机森林_20201228

一. 集成模型

什么是集成模型?
当一个分类或者回归器通过一定的调参之后精度达到一个上界,我们就可能综合考虑多个模型的结果来决策,也就是多模型的决策。

集成模型的分类

1**.bagging**:综合多个强分类器的意见使用投票法得到最后的结果,典型为随机森林
2.boosting:将多个弱分类器加和,典型为adaboost和GBDT(梯度提升树)
弱分类器的作用
使用弱分类器拟合一部分的效果,然后将多个弱分类器加起来
3.stacking:将几个分类器产生的结果做为新的特征进行二次学习,将二次学习的融合器的结果做为最终结果,是一个比较强的算法。不是一个特别典型的机器学习算法,是产生在kaggle平台,这个算法常常出现在kaggle的高分答案中。

强分类器和弱分类器的界定
强分类器有一定的准确率(比如70%),有一定的复杂度。
弱分类器一定要简单,不是一个复杂模型,准确率不高,准确率高于随机猜想,正确率高于50%

二.随机森林

随机森林的核心如何采样?
从样本中随机采样,从特征中随机采样,这两个核心决定了,每棵树都可以有侧重的表达整体分布的一部分。

随机森林的超参数
特征的采样比例
为什么样本的采样比例不是超参数呢
随机森林采用的是boosting采样(又放回的采样),对于有放回的采样有下面的结论,从期望的角度看,从N个样本空间中进行N次的抽样,重复多次后是有2/3的样本被覆盖到,所以对于随机森林来说,每棵树拿到的样本量是一样的,只是分布不一样,

Bagging思想

Bagging是bootstrap aggregating。思想就是从总体样本当中随机取一部分样本进行训练,通过多次这样的结果,进行投票获取平均值作为结果输出,这就极大可能的避免了不好的样本数据,从而提高准确度。因为有些是不好的样本,相当于噪声,模型学入噪声后会使准确度不高。

举个例子

假设有1000个样本,如果按照以前的思维,是直接把这1000个样本拿来训练,但现在不一样,先抽取800个样本来进行训练,假如噪声点是这800个样本以外的样本点,就很有效的避开了。重复以上操作,提高模型输出的平均值。

随机森林

Random Forest(随机森林)是一种基于树模型的Bagging的优化版本,一棵树的生成肯定还是不如多棵树,因此就有了随机森林,解决决策树泛化能力弱的特点。(可以理解成三个臭皮匠顶过诸葛亮)

而同一批数据,用同样的算法只能产生一棵树,这时Bagging策略可以帮助我们产生不同的数据集。Bagging策略来源于bootstrap aggregation:从样本集(假设样本集N个数据点)中重采样选出Nb个样本(有放回的采样,样本数据点个数仍然不变为N),在所有样本上,对这n个样本建立分类器(ID3\C4.5\CART\SVM\LOGISTIC),重复以上两步m次,获得m个分类器,最后根据这m个分类器的投票结果,决定数据属于哪一类。

每棵树的按照如下规则生成

  • 如果训练集大小为N,对于每棵树而言,随机且有放回地从训练集中的抽取N个训练样本,作为该树的训练集;
  • 如果每个样本的特征维度为M,指定一个常数m<<M,随机地从M个特征中选取m个特征子集,每次树进行分裂时,从这m个特征中选择最优的;
  • 每棵树都尽最大程度的生长,并且没有剪枝过程,是一个非常过拟合的完全决策树。

随机森林中的“随机”就是指的这里的两个随机性。两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感)。

总的来说就是随机选择样本数,随机选取特征,随机选择分类器,建立多颗这样的决策树,然后通过这几课决策树来投票,决定数据属于哪一类(投票机制有一票否决制、少数服从多数、加权多数)

随机森林分类效果的影响因素

森林中任意两棵树的相关性:相关性越大,错误率越大;
森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。
减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m(或者是范围),这也是随机森林唯一的一个参数。

随机森林有什么优缺点

优点

  • 在当前的很多数据集上,相对其他算法有着很大的优势,表现良好。
    它能够处理很高维度(feature很多)的数据,并且不用做特征选择(因为特征子集是随机选择的)。
  • 在训练完后,它能够给出哪些feature比较重要。
  • 训练速度快,容易做成并行化方法(训练时树与树之间是相互独立的)。
  • 在训练过程中,能够检测到feature间的互相影响。
  • 对于不平衡的数据集来说,它可以平衡误差。
  • 如果有很大一部分的特征遗失,仍可以维持准确度。

缺点

  • 随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟合。
  • 对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。
  • 不适配较大数据集的情况。
    业界随机森林使用情况
    因为GBDT算法比随机森林强太多,所以现在随机森林几乎没有地方使用

随机森林如何处理缺失值?

根据随机森林创建和训练的特点,随机森林对缺失值的处理还是比较特殊的。

  • 首先,给缺失值预设一些估计值,比如数值型特征,选择其余数据的中位数或众数作为当前的估计值
  • 然后,根据估计的数值,建立随机森林,把所有的数据放进随机森林里面跑一遍。记录每一组数据在决策树中一步一步分类的路径,这样粒度时变粗了的
  • 判断哪组数据和缺失数据路径最相似,引入一个相似度矩阵,来记录数据之间的相似度,比如有N组数据,相似度矩阵大小就是N*N
  • 如果缺失值是类别变量,通过权重投票得到新估计值,如果是数值型变量,通过加权平均得到新的估计值,如此迭代,直到得到稳定的估计值。

其实,该缺失值填补过程类似于推荐系统中采用协同过滤进行评分预测,先计算缺失特征与其他特征的相似度,再加权得到缺失值的估计,而随机森林中计算相似度的方法(数据在决策树中一步一步分类的路径)乃其独特之处。

决策树的ID3和C4.5是没有处理缺失值的能力的,CART是有处理缺失值的能力的。
处理缺失值的处理方案
类别型

  • 空值做为一种特殊的类,使用OOV(out of vacabulary)来表示,比如性别。
  • 预测一个值,比如使用KNN方法,一般我们也不会这样做,因为下游的预测是受上有预测的影响的,这里的预测可能会失真,造成耦合,一般打比赛的时候这种方法可以尝试,实际工作中还是以第一种方法为主。

数值型
计数类:填充0
西瓜含糖率:使用均值或者中位数,中位数适用于长尾的或者有离群点的数据分布,中位数相对均值是可以避免离群点的。数据量很大的话,离群点影响就比较小,业界这两种方案都可以使用。数据量小时尽量不要使用均值

什么是OOB?随机森林中OOB是如何计算的,它有什么优缺点?

OOB

上面我们提到,构建随机森林的关键问题就是如何选择最优的m,要解决这个问题主要依据计算袋外错误率oob error(out-of-bag error)。

bagging方法中Bootstrap每次约有1/3的样本不会出现在Bootstrap所采集的样本集合中,当然也就没有参加决策树的建立,把这1/3的数据称为袋外数据oob(out of bag),它可以用于取代测试集误差估计方法。这也是随机森林不需要做交叉验证的原因

袋外数据(oob)误差的计算方法如下

对于已经生成的随机森林,用袋外数据测试其性能,假设袋外数据总数为O,用这O个袋外数据作为输入,带进之前已经生成的随机森林分类器,分类器会给出O个数据相应的分类
因为这O条数据的类型是已知的,则用正确的分类与随机森林分类器的结果进行比较,统计随机森林分类器分类错误的数目,设为X,则袋外数据误差大小=X/O
优缺点

这已经经过证明是无偏估计的,所以在随机森林算法中不需要再进行交叉验证或者单独的测试集来获取测试集误差的无偏估计。

随机森林的过拟合问题

你已经建了一个有10000棵树的随机森林模型。在得到0.00的训练误差后,你非常高兴。但是,验证错误是34.23。到底是怎么回事?你还没有训练好你的模型吗?

答:该模型过度拟合,因此,为了避免这些情况,我们要用交叉验证来调整树的数量。

构建随机森林回归模型

构建随机森林回归模型demo

猜你喜欢

转载自blog.csdn.net/a18829292719/article/details/111874551