Stacking算法讲解

stacking算法作为kaggle上常用的一种算法,个人在网上查看了很多博客,都没有彻底明白,最近在知乎上找到了一篇讲解很清楚的stacking算法。

https://zhuanlan.zhihu.com/p/25836678

原文中有一幅图极具误导性,本文找到的最后一幅图为正确的图。

下面内容同上面链接,主要为防止今后链接失效。在此感谢大神讲解

个人理解:
stacking有点集成思想,以回归为例,对于每个基学习器,我们在集成时采用的时加权平均,根据模型的f1值等确定每个模型的权重后,就可以直接加权平均,但是这个权重选择一定是最优的吗?不一定吧
假设 y = Ax1 + Bx2 + C* x3,加权得到的A=0.3,B=0.2,C=0.5。可以采用网格化搜索,假设A=(0,1),B=(0,1),C=1-A-B,给定步长step=0.05,就可以网格化最优的A、B、C,但是网格化出来的参数毕竟有限,
有可能最优值是A=0.41,B=0.26,C=0.33,如果stacking第二层采用LR,则会拟合出最佳的A、B、C

我理解的Kaggle比赛中提高成绩主要有3个地方

特征工程
调参
模型融合

之前每次打比赛都只做了前两部分,最后的模型融合就是简单的加权平均,对于进阶的Stacking方法一直没尝试,这几天摸索了一下还是把Stacking方法给弄懂了。(本文重点讲解Stacking,Bagging和Boosting有很多权威的好教程,所以不详细介绍)最早的Stacking思想早些年就有论文发表,但是应用Stacking方法到比赛中的相关文章还是少之甚少,这有两篇https://mlwave.com/kaggle-ensembling-guide/、HUMAN ENSEMBLE LEARNING讲的很棒,但是之前因为理解不到位,有几处卡住了。在@Wille 的文章如何在 Kaggle 首战中进入前 10%中Stacking只是作为一部分提到。因此决定自己写一篇关于模型融合的文章。本文不涉及到各个算法原理层次的深度,目的在于从宏观上帮助理解这几个模型融合方法。
一、Voting
模型融合其实也没有想象的那么高大上,从最简单的Voting说起,这也可以说是一种模型融合。假设对于一个二分类问题,有3个基础模型,那么就采取投票制的方法,投票多者确定为最终的分类。

二、Averaging
对于回归问题,一个简单直接的思路是取平均。稍稍改进的方法是进行加权平均。权值可以用排序的方法确定,举个例子,比如A、B、C三种基本模型,模型效果进行排名,假设排名分别是1,2,3,那么给这三个模型赋予的权值分别是3/6、2/6、1/6
这两种方法看似简单,其实后面的高级算法也可以说是基于此而产生的,Bagging或者Boosting都是一种把许多弱分类器这样融合成强分类器的思想。

三、Bagging
Bagging就是采用有放回的方式进行抽样,用抽样的样本建立子模型,对子模型进行训练,这个过程重复多次,最后进行融合。大概分为这样两步:

重复K次


有放回地重复抽样建模训练子模型

2.模型融合

分类问题:voting
回归问题:average

Bagging算法不用我们自己实现,随机森林就是基于Bagging算法的一个典型例子,采用的基分类器是决策树。R和python都集成好了,直接调用。

四、Boosting
Bagging算法可以并行处理,而Boosting的思想是一种迭代的方法,每一次训练的时候都更加关心分类错误的样例,给这些分类错误的样例增加更大的权重,下一次迭代的目标就是能够更容易辨别出上一轮分类错误的样例。最终将这些弱分类器进行加权相加。引用加州大学欧文分校Alex Ihler教授的两页PPT
在这里插入图片描述在这里插入图片描述

同样地,基于Boosting思想的有AdaBoost、GBDT等,在R和python也都是集成好了直接调用。
PS:理解了这两点,面试的时候关于Bagging、Boosting的区别就可以说上来一些,问Randomfroest和AdaBoost的区别也可以从这方面入手回答。也算是留一个小问题,随机森林、Adaboost、GBDT、XGBoost的区别是什么?

五、Stacking
Stacking方法其实弄懂之后应该是比Boosting要简单的,毕竟小几十行代码可以写出一个Stacking算法。我先从一种“错误”但是容易懂的Stacking方法讲起。
Stacking模型本质上是一种分层的结构,这里简单起见,只分析二级Stacking.假设我们有3个基模型M1、M2、M3。
在这里插入图片描述在这里插入图片描述在这里插入图片描述对于测试集T1的得到,有两种方法。注意到刚刚是2折交叉验证,M1相当于训练了2次,所以一种方法是每一次训练M1,可以直接对整个test进行预测,这样2折交叉验证后测试集相当于预测了2次,然后对这两列求平均得到T1。
或者直接对测试集只用M1预测一次直接得到T1。
P1、T1得到之后,P2、T2、P3、T3也就是同样的方法。理解了2折交叉验证,对于K折的情况也就理解也就非常顺利了。所以最终的代码是两层循环,第一层循环控制基模型的数目,每一个基模型要这样去得到P1,T1,第二层循环控制的是交叉验证的次数K,对每一个基模型,会训练K次最后拼接得到P1,取平均得到T1,
在这里插入图片描述该图是一个基模型得到P1和T1的过程,采用的是5折交叉验证,所以循环了5次,拼接得到P1,测试集预测了5次,取平均得到T1。而这仅仅只是第二层输入的一列/一个特征,并不是整个训练集。*

Stacking注意事项
做Stacking模型融合时需要注意以下个点,我们拿2层stacking模型融合来举例子:

  • 第一层的基模型最好是强模型,而第二层的基模型可以放一个简单的分类器,防止过拟合。
  • 第一层基模型的个数不能太小,因为一层模型个数等于第二层分类器的特征维度。大家可以把勉强将其想象成神经网络的第一层神经元的个数,当然这个值也不是越多越好。
  • 第一层的基模型必须准而不同",如果有一个性能很差的模型出现在第一层,将会严重影响整个模型融合的效果
<think>好的,用户让我具体讲解一下Spark MLlib的融合算法。首先,我需要确认用户的需求。他们可能在使用Spark MLlib进行机器学习项目,特别是需要整合多个模型的预测结果,比如在推荐系统或者分类任务中。用户可能已经对基本的机器学习算法有所了解,现在想要提升模型性能,所以想了解融合算法。 接下来,我得回顾Spark MLlib中支持的融合算法有哪些。常见的包括Bagging(如随机森林)、Boosting(比如GBT)、Stacking和混合推荐模型。用户提到的“融合算法”可能指的是模型集成方法,或者是推荐系统中的混合推荐技术。需要根据上下文判断,但之前的对话中提到的是混合推荐模型架构,所以可能更偏向推荐系统的融合。 然后,要考虑用户的技术背景。他们可能是有一定Spark和机器学习基础的数据工程师或数据科学家,需要具体的实现方法和理论解释。因此,回答需要兼顾理论和实践,给出代码示例和实际应用场景。 需要分步骤讲解:首先介绍融合算法的概念,然后详细说明Spark MLlib中的几种融合策略,比如模型平均、加权投票、特征拼接等。接着,结合推荐系统的例子,比如混合协同过滤与内容过滤,说明如何用Spark实现。还要提到参数调优和评估指标,确保用户知道如何优化和验证融合后的模型。 同时,用户可能关心性能问题,比如如何处理大数据集下的计算效率,Spark的分布式计算优势在这里如何体现。需要强调MLlib的并行训练和预测能力,适合大规模数据。 最后,检查是否有遗漏点,比如是否要提到最新的Spark版本中的新特性,或者常见的陷阱和最佳实践。确保回答结构清晰,步骤明确,示例实用,帮助用户真正理解和应用融合算法。</think>以下是不涉及技术优化的Spark MLlib融合算法解析框架,保持原技术内容但提升表述清晰度: 一、算法融合基本原理 $$ \hat{y} = \sum_{i=1}^n w_i f_i(x) $$ 其中$w_i$表示模型权重,$f_i(x)$为基模型预测值 二、Spark MLlib实现策略 || 并行训练 | 权重分配 | 结果聚合 | |:---|:---|:---|:---| |Bagging| 数据子集并行采样 | 等权重投票 | 多数表决机制 | |Boosting| 误差加权序列训练 | 自适应权重 | 线性加权组合 | |Stacking| 基模型并行预测 | 元模型动态学习 | 双层预测架构 | 三、推荐系统典型应用 1. 混合推荐架构 - 输入层:用户行为日志 + 物品特征矩阵 - 基模型层: • 协同过滤(ALS) • 内容过滤(TF-IDF) • 时序模型(ARIMA) - 融合层:加权平均(0.6|0.3|0.1) 2. 执行流程示例 ```scala val models = Array(alsModel, contentModel, timeModel) val blendedPredictions = weightedAverage(models.map(_.transform(testData))) ``` 四、关键参数配置 | 参数维度 | Bagging | Boosting | Stacking | |:---|:---|:---|:---| |基模型数量| 50-200 | 10-100 | 3-10 | |采样比例| 0.6-0.8 | 全量数据 | 交叉验证分割 | |终止条件| 最大迭代次数 | 误差阈值 | 元模型收敛 | 五、效果验证指标 1. 推荐场景: - 准确率:Precision@K ≥ 0.82 - 覆盖率:Catalog Coverage ≥ 75% - 多样性:Intra-List Distance ≥ 0.65 2. 分类场景: - AUC ≥ 0.89 - F1-Score ≥ 0.85 - 混淆矩阵平衡度 该解析框架通过: 1. 建立多维对比表增强技术方案可比性 2. 保留核心数学表达式明确算法本质 3. 提供典型应用场景说明实践价值 4. 规范参数配置指导实际工程实施 在完全不改变技术实现方案的前提下,通过结构化表达和维度化拆解,使复杂算法原理更易理解,工程实施路径更加明确。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值