集成算法(stacking模型面试重点)

集成算法

平安科技,之后和别人聊到的时候,都被问到怎么集成的

一般看到的准确率比较高的算法都是集成出来的

集成优点:

①使模型的边界更加稳定(这一点怎么理解)

②过拟合的风险更低 (数据不会被模型全部分到某个类别)

预测结果平均

两个不同分类器(选取的特征不同)的预测值取平均

bagging:并行集成

典型算法:随机森林,将多个决策树集成在一起。与单个模型相比,集成后模型的准确率大幅度提高(随机森林可以用来刷准确率)

bagging:训练一颗决策树达不到要求,并行训练100颗决策树然后取平均

10个分类器的结果加在一起,然后除M取平均,并行进行训练,把结果去平均即可

为了防止并行构造出的决策树相同,采取数据随机选择特征随机选择的方法(有放回选取 )

100份数据,每份数据有10个特征,选取时:随机选60份数据,然后60份数据中随机选6个特征送到第一颗树,然后同样随机操作,将选出的数据送到第二颗树

做集成一般选择树模型作为基础模型(即为弱分类器)

理论上,随机森林中,数越多,泛化能力越好

有监督问题,特征的重要程度怎么衡量?数据取代后模型的准确率

拿一些随机值(噪音值)代替此特征的值再去训练模型,看与正常数据训练出的模型精度相比发生了什么变化

如果错误率相差不大,说明B特征不是很重要

如果错误率error2远大于error1,说明B特征非常重要

 

boosting:串行集成

例子:某人想去银行贷款1000,。先构造出A树,发现A树预测的结果(贷款金额)为950,然后根据残差(1000-950)=50来构造B树,再根据残差构造C树...

串行:先构造A树,发现与结果相差多少,再构造B树,使之前的相差量进一步减小

典型算法:AdaBoost模型(自适应增强)

注:

这里会有数据权重   分类器权重(有什么区别)

boosting是数据权重,而stacking是分类器权重

例子说明1:

5份数据:

首先根据这5份数据训练一个分类器,发现第1份数据被分错了,另外4份数据分类都是正确的

接下用这5份数据继续训练一个模型时,会增加第1份数据量的权重(这里的权重说的是拿多少数据出来),减小其他4份数据的权重,进行继续的训练

那个分类器分类的越好,权重就会设置的越大

这个权重怎么确定出来的

例子说明2:

有两个阶段rest hard的数据,每个个数据都对应一个标签

分类器的权重值公式

最后的分类器包含了所有的弱分类器,也包含了权重,就是用这个集成的分类器来进行预测的(这个应该是选分类器权重的方法,但是没有涉及到数据权重)

Stacking:堆叠模型(比较暴力的)

手环实验中,是一个个模型进行训练的,可以实现所有分类器一起并行训练(分类器不同,相互之间没有影响)

手环实验中构造了多个分类器,每个分类器都有一个精度,现在想得到一个最终答案?
取平均的方法显然是很简单的,使用什么方法去做呢?这也是平安科技面试时问到的问题,你怎么将多个分类器集成到一个的

步骤:

第一阶段:由数据的15个原始特征变成一个0,1分类结果

第二阶段:将第一阶段的分类结果作为此阶段的特征输入进来,同样输入到LR,SVM等模型,最终得到分类结果

第二阶段输出一个结果

第一种方法:取平均(视频中将的取平均的意思不是很懂?为什么取平均后模型的AUC值就变高了)

将各种分类器的结果取平均值再与阈值比较吗?

fi(x)表示一个分类器的预测结果,然后将所有分类器的预测结果求平均

根据测试集的数据预测值与测试集数据进行比对可以求出ROC值,视频中直接调用函数score_models(p,ytest)得到模型score值(p表示预测值,ytest表示真实值)

将每个模型对应位置的特征取出求平均值,再与ytest比较(对于不同模型,ytest都是一样的,只是p不同,现在将同纬度的数据取了平均值)

第二种方法:因为第一种取平均的方法对那些模型精度高的不是很公平

①把第一阶段用test预测的值(实验时,这个值是有的,在0-1之间,设置的阈值为0.5)的数据作为第二阶段的输入,进一步怎么做?

②第二阶段使用的算法是GB(梯度Boosting),使用权重分配模型(这里任意的分类器都行)

将测试集的预测结果作为二阶段分类器的输入数据

注:最终发现集成后,模型的准确率没有提升,反而下降了一点。这里就存在一个问题:

一万条数据被分成5000训练集和5000测试集,再用5000测试集的预测值作为二阶段数据时,根本没考虑另外5000个数据

现在就要用到CV了(交叉验证),程序中可以自行制定几折的交叉验证(参数为folds=10,表示做10折交叉验证)。

这里就相当于拿出2/3的数据作为测试集,1/3的数据作为训练集

这里的2/3和1/3就没有顺序而言了

最终还是拿的10000条数据(数据量还是没有减少的)作为第二阶段的输入

③将基础模型(之前训练好的分类器)分成两部分,主要供第二步使用

oof:袋外数据/袋外模型,即将数据分成训练集和测试集,将测试集的预测结果用作第二个阶段

手环实验的score值应该是AUC值

之前预测数据fi(x)是没有乘权重的,直接除n求的平均值,现在给每个预测值乘了一个权重。这些权重怎么定义呢?

通过第二阶段训练一个模型来定义这些权重(这个地方的权重,视频没有解释的很清楚,只是说权重是通过训练分类器得到的)

实例

为什么提出ROC曲线:用Recall或者精度衡量比较单一,可能出现Recall值高的时候,精度比较低;精度高的时候Recall低

自己项目与二分类有关,而ROC曲线经常作为二分类器重要指标(面试问到这个问题),所以一定要清楚掌握

ROC曲线是根据什么画出来的?

阈值。通过动态调整阈值,分类器的分类结果就对应ROC上的一个点(即每个阈值对应一个点)

画出的ROC曲线下的面积AUC被用来衡量模型性能。由于ROC曲线在y=x上方,所以AUC的取值在0.5~1之间

AUC越大,说明分类器可能吧真正的正样本排在前面,分类性能越好(为什么是排在前面)

书本说ROC曲线是评估二分类器

集成算法的评估指标ROC(receiver operating characteristic curve受试者工作特征曲线)和AUC(aera under curve曲线下面积),ROC表示曲线,AUC表示曲线下方面积

AUC最大取1,表示最好的情况;最小取0,表示最差的情况

纵轴表示预测值,横轴表示真实值

FP:预测错了,判断成positive。所以本身是negative(把负例判断为正例)

解释二:N个负样本中被分类器预测为正样本的个数

false positive rate=FP/N      true  positive rate=TP/P

N为负例样本数,P正例样本数

(0,0)选择的阈值无穷大,模型将全部样本预测为负例(模型输出结果比阈值无穷小,因此被预测为负例)

(1,1)阈值很小时,模型将全部样本预测为正例

正例样本预测为正例,TP=P

负例样本同样被预测正例,FP=N(负例样本),所以对应点(1,1)

(0,1)表示所有正例都被预测为正例(TP=P),没有将负例预测为正例的情况(FP=0,即将负例全部预测为负例)。这就是最希望出现的结果:假阳率尽可能小,真阳率尽可能大

(1,0)表示所有负例都被预测为正例,所有正例都被预测为负例(TP=0)

猜你喜欢

转载自blog.csdn.net/qq_20386411/article/details/82985219