本次活动为datawhale与天池联合举办,为金融风控之贷款违约预测挑战赛(入门)
比赛地址:https://tianchi.aliyun.com/competition/entrance/531830/introductionhtml
这里得谈到集成学习:
集成学习能够分为两类,一种是把强分类器进行强强联合,使得融合后的模型效果更强,称为模型融合。另外一种是将弱分类器经过学习算法集成起来变为很强的分类器,称为机器学习元算法。python
这里咱们把用来进行融合的学习器称为个体学习器。web
模型融合的表明有:投票法(Voting)、线性混合(Linear Blending)、Stacking。算法
而机器学习元算法又能够根据个体学习器之间是否存在依赖关系分为两类,称为Bagging和Boosting:dom
模型融合
在进行模型融合的时候,也不是说随意的融合就能达到好的效果。进行融合时,所需的集成个体(就是用来集成的模型)应该好而不一样。好指的是个体学习器的性能要好,不一样指的是个体模型的类别不一样。机器学习
在这里举个西瓜书的例子,在介绍例子以前,首先提早介绍简单投票法,以分类问题为例,就是每一个分类器对样例进行投票,哪一个类别获得的票数最多的就是融合后模型的结果。
在上面的例子中,采用的就是简单的投票法。中间的图b各个模型输出都同样,所以没有什么效果。第三个图c每一个分类器的精度只有33%,融合后反而更糟。也就是说,想要模型融合有效果,个体学习器要有必定的准确率,而且要有多样性,学习器之间具备差别,即”好而不一样“。svg
如何作到好而不一样呢?能够由下面几个方面:性能
那么进行模型融合为何比较好呢?虽然有俗话说:三个臭皮匠胜过诸葛亮,可是咱们仍是想知道,到底是如何“胜过诸葛亮”的。这里摘录西瓜书以下:学习
学习器的结合可能会从三个方面带来好处:spa
首先,从统计的方面来看,因为学习任务的假设空间每每很大,可能有多个假设在训练集上达到相同的性能,此时若使用单学习器,可能因误选而致使泛化性能不佳,结合多个学习器则会减小这一风险;
第二,从计算的方面来看,学习算法每每会陷入局部极小,有的局部极小点所对应的泛化性能可能很糟糕,而经过屡次运行以后进行结合,可下降陷入糟糕局部极小点的风险;
第三,从表示的方面来看,某些学习任务的真实假设可能不在当前学习算法所考虑的假设空间中,此时若使用单学习器则确定无效,而经过结合多个学习器,因为相应的假设空间有所扩大,有可能学得更好的近似。
简单平均法
简单加权平均,结果直接融合 求多个预测结果的平均值。pre1-pren分别是n组模型预测出来的结果,将其进行加权融
pre = (pre1 + pre2 + pre3 +...+pren )/n
加权平均法
加权平均法 通常根据以前预测模型的准确率,进行加权融合,将准确性高的模型赋予更高的权重。
pre = 0.3pre1 + 0.3pre2 + 0.4pre3
简单投票
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))
排序融合
log融合
构建多层模型,并利用预测结果再拟合预测。
选取部分数据预测训练获得预测结果做为新特征,带入剩下的数据中预测。
参考:
细语呢喃