集成学习算法类型
Bagging 随机森林
若干个弱学习器并行跑, 解决相同的问题, 最后大家投票
Boosting串行模型
-
Adaboost /GBDT/ xgboost lightGMB -
一步一步逼近最终改的目标 -
训练出一个模型, 比较一下和最终目标之间的差别 -
第二个模型, 实在第一个模型基础之上, 朝着差别去训练
Stacking 串行 模型
集成学习模型的特点
- 都可以输出特征重要性 feature_importance
- 在特征筛选的时候, 可以使用集成学习模型的这个特点
随机森林API实现
基本原理: 若干个弱学习器并行执行相同的任务
- boostrap 采样, 特征随机抽取, 样本随机抽取, 建立N棵树
from sklearn.ensemble import RandomForestClassifier
param={"n_estimators":[80,100,200], "max_depth": [2,4,6,8,10,12],"random_state":[9]}
from sklearn.model_selection import GridSearchCV
gc = GridSearchCV(rf, param_grid=param, cv=2)
n_estimators 森林里有几棵树
max_depth 每一颗树的最大深度
max_features 特征最大采样比例
作为集成学习模型, 随机森林可以输出特征重要性
- rfc.feature_importances_
- 从模型本身角度来讲, 集成学习模型可解释性, 总体可解释性没有问题, 但是对单条数据来说, 可是解释性不如线性模型(逻辑回归, 线性回归), 或者决策树
BoostingAPI实现
Adaboost迭代算法有3步:
1.初始化训练数据的权值分布:假设有N个样本,每个样本赋予相同权值1/N。
2.训练弱分类器:本轮训练中,若某样本分错,则提高它的权值,相反分类正确的样本被降低权值。然后,权值更新过的全体样本被用于训练下一个分类器,使得下一个分类器更关注权重大的难分样本。多次迭代,训练多个弱分类器。
3.加权组合弱分类器:加大分类误差率小的弱分类器的权重,使其在最终表决中起较大作用,而降低分类误差率大的弱分类器的权重,使其在最终表决中起较小作用
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
tree = DecisionTreeClassifier(criterion='entropy',max_depth=1,random_state=0)
ada= AdaBoostClassifier(base_estimator=tree,n_estimators=500,learning_rate=0.1,random_state=0)
GBDT原理
- 前一个模型预测出的结果, 计算误差作为后一个模型数据
- GBDT→XGBoost→LightGBM
- 基本原理都是一样的
- 只不过在训练的过程中, 有了不同的优化
集成学习的重点
- Baggging 和boosting 原理
- 各自对应的算法
- 特征重要性
|