机器学习 模型融合

1.Voting

        投票法针对分类模型,多个模型的分类结果进行投票,少数服从多数。除了公平投票外,还可以给投票设置权重,分类器效果越好权重越高,分类器效果越差,权重越低。

2.Averaging

回归问题:直接取平均值作为最终的预测值,也可以使用加权平均。
分类问题:直接将模型的预测概率做平均,也可以使用加权平均。
可以把所有模型预测的结果作为新的特征,再通过线性回归计算出权重

3.Ranking

Ranking融合适合排序评估指标,对auc比较有效。具体公式如下:

                                                                                                \sum_{i=1}^{n}\frac{Weight_{i}}{Rank_{i}}

        其中,n表示模型个数,Weight_{i}表示该样本在第i个模型的权重,所有权重相同表示平均融合,Rank_{i}表示该样本在第i个模型中的升序排名。

4.Bagging

        采用有放回的方式抽取训练子集来训练每个基模型,最后所有基模型进行融合,分类问题进行投票,回归问题进行平均。除了构建不同的训练子集,也可以构建不同的特征和参数保证基模型的差异性,最后再进行融合。参考随机森林。

5.Boosting

        Boosting算法是一种迭代算法。每轮迭代中会在训练集上产生一个新的分类器,然后使用该分类器对所有样本进行分类,以评估每个样本的重要性。具体来说,算法会为每个训练样本赋予一个权值。每次用训练完的新分类器标注各个样本,若某个样本点已被分类正确,则将其权值降低,并以该权重进行下一次数据的抽样(抽中的概率减小);若样本点未被正确分类,则提高其权值,并以该权重进行下一次数据的抽样(抽中的概率增大)。权值越高的样本在下一次训练中所占的比重越大,也就是说越难区分的样本在训练过程中会变得越来越重要。 整个迭代过程直到错误率足够小或达到一定次数才停止。 参考adaboost,gbdt,xgboost。
      (1)Bagging + 决策树 = 随机森林
      (2)AdaBoost + 决策树 = 提升树
      (3)Gradient Boosting + 决策树 = GBDT
Bagging和Boosting算法的区别: 
      (1)bagging的训练集是随机的,各训练集是独立的;而boosting训练集的选择不是独立的,每一次选择的训练集都依赖于上一次学习的结果。
   (2)bagging的每个预测函数都没有权重;而boosting根据每一次训练的训练误差得到该次预测函数的权重。
      (3)bagging的各个预测函数可以并行生成;而boosting只能顺序生成。

6.Stacking

        Stacking是指将多种分类器组合在一起来取得更好表现的一种集成学习模型。一般情况下,Stacking模型分为两层。第一层中我们训练多个不同的模型,然后再以第一层训练的各个模型的输出作为输入来训练第二层的模型,以得到一个最终的输出。
        首先,我们从stacking模型的训练开始阐述。假如该模型的第一层有五个分类模型,第二层有一个分类模型。在第一层中,对于不同的分类模型,我们分别将训练数据分为5份,接下来迭代5次。每次迭代时,将4份数据作为训练集对每个分类模型进行训练,然后剩下一份数据在训练好的分类模型上进行预测并且保留结果。当5次迭代都完成以后,我们就获得了一个结果矩阵。该矩阵是一个N*1的矩阵,N是训练集的样本数。当5个模型都进行完上述操作后,我们就可以得到一个N*5的结果矩阵。然后将该结果矩阵导入到第二层的模型中进行训练,此时全部模型训练完毕。接下来是stacking模型的预测过程。
        接下来我们开始阐述该模型的预测过程。在第一层中,对于不同分类模型,我们还是使用在训练时分成的5份训练数据进行五次迭代。每次迭代时,我们利用训练后的分类模型对预测集进行预测并保留下来。当5次迭代都完成以后,我们可以得到一个M*5的矩阵,M是预测集的样本数。 我们将这个矩阵按列取平均,缩减成M*1的矩阵。当5个模型都进行完上述操作后,我们就可以得到一个N*5的结果矩阵。然后将该矩阵导入到第二层中训练好的模型进行预测,就可以得到最终的预测结果。
        参考链接:https://blog.csdn.net/data_scientist/article/details/78900265

7.Blending

Blending直接用不相交的数据集用于不同层的训练。
以两层的Blending为例,训练集划分为两部分(train1,train2),测试集为test。
第一层:用train1训练多个模型,将其对train2和test的预测结果作为第二层的新特征。
第二层:用train2的新特征和标签训练新的分类器,然后把test的新特征输入作为最终的预测值。

猜你喜欢

转载自blog.csdn.net/zh11403070219/article/details/82286429