首页 理论教育 基于大数据挖掘预测服刑人员再犯罪

基于大数据挖掘预测服刑人员再犯罪

时间:2023-07-31 理论教育 版权反馈
【摘要】:Stacking算法的示意图见图5-25所示。图5-25Stacking算法原理示意图2.Stacking算法流程Stacking是一种分层模型集成框架。以两层为例,第一层由多个基分类学习器组成,其输入为原始训练集;第二层的模型则是以第一层基分类学习器的输出作为训练集进行再训练,从而得到完整的Stacking模型。Stacking算法的形式化描述如下:过程是训练出来个体学习器,也就是初级分类学习器。图5-26Stacking交叉验证示意图以5折划分为例,我们将原始训练集分为5折,分别记为fold1、fold2、fold3、fold4和fold5。

基于大数据挖掘预测服刑人员再犯罪

1.Stacking算法概述

Stacking(有时候也称之为Stacked generalization)是指训练一个模型用于组合其他各个模型。即首先我们训练多个不同的模型,然后再以之前训练的各个模型的输出为输入来训练一个模型,以得到一个最终的输出。Bagging和Boosting算法通常使用同一种类型的基模型,并且通过直接组合基模型的预测结果来得到最终的预测结果。而Stacking算法通常用来集成不同类型的基模型,可分别使用支持向量机、逻辑回归决策树等作为基模型。Stacking在得到多个基模型的预测结果后,并不是将这些基模型直接组合,而是将这些基模型的预测结果当作输入特征,将每一个样本真实的类别作为学习目标,重新训练一个高层的综合模型。在Stacking方法中,我们把每个弱分类器叫作初级分类器,用于结合的分类器叫作次级分类或元学习器(Meta-Learner),次级分类器用于训练的数据叫作次级训练集,次级训练集是在训练集上用初级分类器得到的。Stacking算法的示意图见图5-25所示。

图5-25 Stacking算法原理示意图

2.Stacking算法流程

Stacking是一种分层模型集成框架。以两层为例,第一层由多个基分类学习器组成,其输入为原始训练集;第二层的模型则是以第一层基分类学习器的输出作为训练集进行再训练,从而得到完整的Stacking模型。

Stacking算法的形式化描述如下:

过程(1)是训练出来个体学习器,也就是初级分类学习器。过程(3)是使用训练出来的初级分类学习器预测的结果,这个预测的结果当作次级分类学习器的训练集。过程(4)是用初级分类学习器预测的结果训练出次级分类学习器,得到我们最后训练的模型。如果想要预测一个数据的输出,只需要把这条数据用初级分类学习器预测,然后将预测后的结果用次级分类学习器预测便可。(www.xing528.com)

但是这样的实现是有很大的缺陷的,在原始数据集D上面训练的基模型,然后用这些基模型再进行预测得到的训练效果肯定是非常好的,但会出现过拟合的现象。那么,我们换一种做法,我们用交叉验证的思想来实现Stacking模型。以两层Stacking模型为例,要得到Stacking模型,关键在于如何构造第二层的特征(下记为元特征,Meta Feature),构造元特征的原则是尽可能地避免信息泄露,因此对原始训练集常常采用类似于K折交叉验证的划分方法,具体见图5-26所示。

图5-26 Stacking交叉验证示意图

以5折划分为例,我们将原始训练集分为5折,分别记为fold1、fold2、fold3、fold4和fold5。此时我们使用fold2~fold5的数据来训练基模型1,并对fold1进行预测,该预测值即作为基模型1对fold1生成的元特征;同样地,使用fold1、fold3~fold5的数据来训练基模型1,并对fold2进行预测,该预测值即作为基模型1对fold2生成的元特征;以此类推,得到基模型1对整个原始训练集生成的元特征。同样地,对其他基模型也采用相同的方法生成元特征,从而构成用于第二层模型(下记为元模型,Meta Model)训练的完整元特征集。对于测试集,我们可以在每次基模型训练好时预测,再将预测值做均值处理;也可以将基模型拟合全部的训练集之后再对测试集进行预测。对于每一轮的5-fold,Model 1都要做满5次的训练和预测。我们假定:Train Data有890行(请对应图5-26中的上层部分)。每1次的fold,都会生成713行小train,178行小test。我们用Model 1来训练713行的小train,然后预测178行小test,预测的结果是长度为178的预测值。这样的动作走5次,长度为178的预测值*5=890预测值,刚好和Train data长度吻合。这个890预测值是Model 1产生的,我们先存着,因为一会它将是第二层模型的训练来源。这一步产生的预测值我们可以转成890*1(890行,1列),记作P1。Test Data有418行(请对应图5-26中的下层部分)。每1次的fold,713行小train训练出来的Model 1要去预测我们全部的Test Data(因为Test Data没有加入5-fold,所以每次都是全部)。此时,Model 1的预测结果是长度为418的预测值。这样的动作走5次,我们可以得到一个5*418的预测值矩阵。然后我们根据行来平均值,最后得到一个1*418的平均预测值。这一步产生的预测值我们可以转成418*1(418行,1列),记作p1。走到这里,第一层的Model 1完成了它的使命。第一层还会有其他Model的,比如Model 2,同样地走一遍,我们又可以得到890*1(P2)和418*1(p2)预测值矩阵。这样吧,假设你第一层有3个模型,这样你就会得到:

来自5-fold的预测值矩阵890*3,(P1,P2,P3)和来自Test Data预测值矩阵418*3(p1,p2,p3)。来自5-fold的预测值矩阵890*3作为你的Train Data,训练第二层的模型时Test Data预测值矩阵418*3就是你的Test Data,用训练好的模型来预测它们吧。

需要注意的是,在生成第二层特征的时候,各个基模型要采用相同的K-fold,这样得到的元特征的每一折(对应于之前的K折划分)都将不会泄露该折数据的目标值信息,从而尽可能地降低过拟合的风险。虽然如此,实际上我们得到的元特征还是存在一定程度上的信息泄露,比如我们在预测第二折的时候,是利用了第一折的目标值信息来训练基模型的,也就是说第一折的目标值信息杂糅在对第二折进行预测的基模型里。但是,实践中,这种程度的信息泄露所造成的过拟合程度很小。

Stacking模型调参包括对基模型和元模型进行调参。对于基模型,因为我们在生成元特征的时候要使用相同的K折划分,所以我们使用交叉验证+网格搜索来调参时最好使用与生成元特征相同的K-fold。对于元模型的调参,使用交叉验证+网格搜索来调参时,为了降低过拟合的风险,我们最好也使用与元特征生成时同样的K-fold。

综上,Stacking方法从一开始就得确定一个K-fold,这个K-fold将伴随对基模型的调参、生成元特征以及对元模型的调参,贯穿整个Stacking流程。当然,由于我们生成基模型时未使用全部数据,我们可以使用多个不同的K-fold来生成多个Stacking模型然后进行加权,这样可以进一步提高算法的鲁棒性。另外,基模型的选择需要考虑的是:基模型之间的相关性要尽量小,同时基模型之间的性能表现不能差距太大。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈