Task5 模型融合
常见的模型融合方法
-
Voting投票器
Voting可以说是一种最为简单的模型融合方式。假如对于一个二分类模型,有3个基础模型,那么就采取投票的方式,投票多者为最终的分类。
-
Bagging
Bagging的思想是利用抽样生成不同的训练集,进而训练不同的模型,将这些模型的输出结果综合(投票或平均的方式)得到最终的结果。Bagging本质上是利用了模型的多样性,改善算法整体的效果。Bagging的重点在于不同训练集的生成,这里使用了一种名为Bootstrap的方法,即有放回的重复随机抽样,从而生成不同的数据集。具体流程如下图所示:
-
随机森林(Random forest)
随机森林实际上就是Bagging算法的进化版,不同于Bagging算法的是,
Bagging产生不同数据集的方式只是对行利用有放回的随机抽样,而随机森林产生不同数据集的方式不仅对行随机抽样也对列进行随机抽样
-
Blending
Blending主要是用不相交的数据训练不同的基础模型,将他们的输出取(加权)平均。Blending分为Uniform blending和Linear blending,前者在分类时使用一人一票的投票方式,回归时采用多个模型的平均值。后者是二次学习,使用线性模型将第一步中学习到的学习器的输出结果组合起来。相当于简化版的Stacking。
-
Stacking
Stacking背后的基本思想是使用大量基分类器,然后使用另一种分类器来融合它们的预测结果,旨在降低泛化误差。Stacking算法分为2层,第一层是用不同的算法形成T个基础分类器,同时产生一个与原数据集大小相同的新数据集,利用这个新数据集和一个新算法构成第二层的分类器。在训练第二层分类器时采用各基础分类器的输出作为输入,第二层分类器的作用就是对基础分类器的输出进行集成。但是由于Stacking模型复杂度过高,比较容易造成过拟合。流程图如下所示:
-
Boosting
Boosting是一种提升算法,其思想是在算法迭代过程中,每次迭代构建新的分类器,重点关注被之前分类器分类错误的样本,如此迭代,最终加权平均所有分类器的结果,从而提升分类精度。Boosting与Bagging相比来说最大的区别就是Boosting是串行的,而Bagging中所有的分类器是可以同时生成的(分类器之间无关系),而Boosting中则必须先生成第一个分类器,然后依次往后进行。核心思想是通过改变训练集进行有针对性的学习,通过每次更新迭代,增加错误样本的权重,减小正确样本的权重。知错就改,逐渐变好。典型应用为:Adaboost、GBDT和Xgboost。流程图如下所示:
代码实例
## Starking
## 第一层
train_lgb_pred = model_lgb.predict(x_train)
train_xgb_pred = model_xgb.predict(x_train)
train_gbdt_pred = model_gbdt.predict(x_train)
Strak_X_train = pd.DataFrame()
Strak_X_train['Method_1'] = train_lgb_pred
Strak_X_train['Method_2'] = train_xgb_pred
Strak_X_train['Method_3'] = train_gbdt_pred
Strak_X_val = pd.DataFrame()
Strak_X_val['Method_1'] = val_lgb
Strak_X_val['Method_2'] = val_xgb
Strak_X_val['Method_3'] = val_gbdt
Strak_X_test = pd.DataFrame()
Strak_X_test['Method_1'] = subA_lgb
Strak_X_test['Method_2'] = subA_xgb
Strak_X_test['Method_3'] = subA_gbdt
def Weighted_method(test_pre1,test_pre2,test_pre3,w=[1/3,1/3,1/3]):
Weighted_result = w[0]*pd.Series(test_pre1)+w[1]*pd.Series(test_pre2)+w[2]*pd.Series(test_pre3)
return Weighted_result
## Init the Weight
w = [0.3,0.4,0.3]
## 测试验证集准确度
val_pre = Weighted_method(val_lgb,val_xgb,val_gbdt,w)
MAE_Weighted = mean_absolute_error(y_val,val_pre)
print('MAE of Weighted of val:',MAE_Weighted)
## 预测数据部分
subA = Weighted_method(subA_lgb,subA_xgb,subA_gbdt,w)
print('Sta inf:')
Sta_inf(subA)
## 生成提交文件
#sub = pd.DataFrame()
#sub['SaleID'] = test['SaleID']
#sub['price'] = subA
#sub.to_csv('./333.csv',index=False)
总结
本次开源学习,让我明白了整个数据挖掘的流程
赛题理解——>EDA——>特征工程——>建模与调参——>模型的融合
了解赛题
- 赛题概况
- 数据概况
- 预测指标
- 分析赛题
EDA目标
- EDA的价值主要在于熟悉数据集,了解数据集,对数据集进行验证来确定所获得数据集可以用于接下来的机器学习或者深度学习使用。
- 当了解了数据集之后我们下一步就是要去了解变量间的相互关系以及变量与预测值之间的存在关系。
- 引导数据科学从业者进行数据处理以及特征工程的步骤,使数据集的结构和特征集让接下来的预测问题更加可靠。
特征工程目标
- 对于特征进行进一步分析,并对于数据进行处理。
- 导入数据
- 删除异常值
- 特征构造
- 特征筛选
建模调参
- 了解常用的机器学习模型,并掌握机器学习模型的建模与调参流程
- 线性回归模型
- 决策树模型
- GBDT模型
- XGBoost模型
- LightGBM模型
模型融合目标
- 对于多种调参完成的模型进行模型融合。
参考:模型融合:kaggle比赛胜出的杀手锏 - 知乎 (zhihu.com)