阿里云天池金融风控训练营广东工业-梁钰莹task5学习笔记
学习链接:https://tianchi.aliyun.com/specials/activity/promotion/aicampfr
一、学习知识点概要
将之前建模调参的结果进行模型融合。
模型融合的方式:
- 平均:
- 简单平均法
- 加权平均法
- 投票:
- 简单投票法
- 加权投票法
- 综合:
- 排序融合
- log融合
- stacking:
- 构建多层模型,并利用预测结果再拟合预测。
- blending:
- 选取部分数据预测训练得到预测结果作为新特征,带入剩下的数据中预测。
二、学习内容
2.1平均
- 简单加权平均,结果直接融合 求多个预测结果的平均值。pre1-pren分别是n组模型预测出来的结果,将其进行加权融
pre = (pre1 + pre2 + pre3 +...+pren )/n
- 加权平均法 一般根据之前预测模型的准确率,进行加权融合,将准确性高的模型赋予更高的权重。
pre = 0.3pre1 + 0.3pre2 + 0.4pre3
2.2、投票
- 简单投票
from xgboost import XGBClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier, VotingClassifier
clf1 = LogisticRegression(random_state=1)
clf2 = RandomForestClassifier(random_state=1)
clf3 = XGBClassifier(learning_rate=0.1, n_estimators=150, max_depth=4, min_child_weight=2, subsample=0.7,objective='binary:logistic')
vclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('xgb', clf3)])
vclf = vclf .fit(x_train,y_train)
print(vclf .predict(x_test))
- 加权投票
在VotingClassifier中加入参数 voting='soft', weights=[2, 1, 1],weights用于调节基模型的权重
from xgboost import XGBClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier, VotingClassifier
clf1 = LogisticRegression(random_state=1)
clf2 = RandomForestClassifier(random_state=1)
clf3 = XGBClassifier(learning_rate=0.1, n_estimators=150, max_depth=4, min_child_weight=2, subsample=0.7,objective='binary:logistic')
vclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('xgb', clf3)], voting='soft', weights=[2, 1, 1])
vclf = vclf .fit(x_train,y_train)
print(vclf .predict(x_test))
2.3、stacking
- stacking 将若干基学习器获得的预测结果,将预测结果作为新的训练集来训练一个学习器。如下图 假设有五个基学习器,将数据带入五基学习器中得到预测结果,再带入模型六中进行训练预测。但是由于直接由五个基学习器获得结果直接带入模型六中,容易导致过拟合。所以在使用五个及模型进行预测的时候,可以考虑使用K折验证,防止过拟合。
- blending 与stacking不同,blending是将预测的值作为新的特征和原特征合并,构成新的特征值,用于预测。为了防止过拟合,将数据分为两部分d1、d2,使用d1的数据作为训练集,d2数据作为测试集。预测得到的数据作为新特征使用d2的数据作为训练集结合新特征,预测测试集结果。
2.4、blending
- Blending与stacking的不同
- stacking
- stacking中由于两层使用的数据不同,所以可以避免信息泄露的问题。
- 在组队竞赛的过程中,不需要给队友分享自己的随机种子。
- Blending
- 由于blending对将数据划分为两个部分,在最后预测时有部分数据信息将被忽略。
- 同时在使用第二层数据时可能会因为第二层数据较少产生过拟合现象。
- stacking
2.5、总结
- 简单平均和加权平均是常用的两种比赛中模型融合的方式。其优点是快速、简单。
- stacking在众多比赛中大杀四方,同时stacking多层提升幅度并不能抵消其带来的时间和内存消耗,所以实际环境中应用还是有一定的难度,同时在有答辩环节的比赛中,主办方也会一定程度上考虑模型的复杂程度,所以说并不是模型融合的层数越多越好的。
- 当然在比赛中将加权平均、stacking、blending等混用也是一种策略。
三、学习问题与解答
问:比赛中许多人会优先选择stacking,那么相对来说Blending的优缺点又有什么呢?
答:1、Blending比较简单,而Stacking相对比较复杂;
2、能够防止信息泄露:generalizers和stackers使用不同的数据;
3、不需要和你的队友分享你的随机种子;
而缺点在于:
1、只用了整体数据的一部分;
2、最终模型可能对留出集(holdout set)过拟合;
3、Stacking多次交叉验证要更加稳健。
四、学习思考与总结
学习了多个模型融合的方式,将之前建模调参的结果进行了简单的模型融合。学习过程中,我觉得stacking的学习是比较困难的,需要借助许多网上的博文来理解。而且对代码的要求越来越高,这方面我还有待加强。