集成学习算法
一、集成学习
1.什么是集成学习?
集成学习是通过建立几个模型来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立的学习和做出预测,然后将这些预测最后整合成组合预测,因此优于任何一个单分类的做出的预测。
2.机器学习的两个核心问题
- 如何训练数据---- 解决欠拟合问题
- 如何提升泛化性能---- 解决过拟合问题
3.集成学习中的boosting和Bagging
只要单分类器的表现不太差,集成学习的结果总是要好于单分类器的。
4.Bagging
4.1Bagging的原理
- 1 从样本集中重采样(有重复的,有放回采样)选出n个样本,n为原始样本集的样本个数;
- 2 在所有特征上,对这个n个样本建立基本分类器(分类器如ID3、C4.5、CART、SVM、Logistic回归等。在这里,均称为弱分类器。);
- 3 重复以上两步m次,即获得m个分类器;
- 4 将数据放在这m个联合分类器上(m个分类器组成了一个强分类器),最后根据这m个分类器的平权投票结果,决定数据属于哪一类。
简单来说就是采样、学习、集成,平权投票就是少数服从多数!
5.随机森林的构造过程
在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。
随机森林就是Bagging的改进版, 随机森林 = Bagging + 决策树
5.1随机森林的原理
- 1 从样本集中重采样(有重复的,有放回采样)选出m个样本
- 2 随机选取K个数据特征 m << M (M表示总特征数)
- 3 训练决策树 默认为CART树
- 4 重复1-3步骤构造n个弱决策树
- 5 平权投票集成n个弱决策树
5.2 随机森林API
- sklearn.ensemble.RandomForestClassifier(n_estimators=10,criterion=‘gini’,max_depth=None,bootstrap=True,random_state=None,min_samples_split=2)
- n_estimators:森林里的数目数量,默认为10
- Criterion:特征标准 默认为gini 悉尼指数
- max_depth:树的最大深度
- max_features=‘auto’:每个决策树的最大特征数量
- If “auto”, then
max_features=sqrt(n_features)
. - If “sqrt”, then
max_features=sqrt(n_features)
(same as “auto”). - If “log2”, then
max_features=log2(n_features)
. - If None, then
max_features=n_features
.
- If “auto”, then
- bootstrap:是否在构建树的时候使用放回抽样
- min_samples_split:节点划分最少样本数
- min_samples_leaf:叶子节点最少样本数
5.3 随机森林预测的案例
- 实例化随机森林
estimator = RandomForestClassifier()
- 定义超参数的选择列表
param = {'n_estimators':[100,200,300,400,500],'max_depth':[1,2,3,4,5]}
- 使用GridSearchCV进行网格搜索
transfer = GridSearchCV(estimator,param_grid=param,cv=2)
transfer.fit(x_train,y_train)
print("随机森林预测的准确率:",transfer.score(x_test,y_test))
6.Boosting
1.什么是boosting
随着学习的积累从弱到强,就是每加入一个弱学习器,整体能力就会得到提升。
2.boosting实现过程:
-
1.初始化训练数据权重相等,训练第一个学习器
-
2.计算该学习器在训练数据中的错误率
-
3.计算该学习器的投票权重
-
4.根据投票权重对训练数据重新赋权
将下一轮学习器的注意力集中在错误的数据上。
-
5.重复执行1-4步m次
-
6.对m个学习期进行加权投票
bagging集成与boosting集成的区别:
- 区别一:数据方面
- bagging 对数据进行采样
- boosting 根据前一轮学习结果调整数据的重要性
- 区别二:投票方面
- bagging 所有学习器平权投票
- boosting 对学习器进行加权投票
- 区别三:学习顺序
- bagging 学习是并行的,每个学习器之间没有依赖关系
- boosting 是串行的,学习是有先后顺序的
- 区别四:主要作用
- bagging 主要用于提高泛化性能(解决过拟合,也可说降低方差)
- boosting 主要用于提高训练精度(解决欠拟合,也可以说降低偏差)
3.from sklearn.ensemble import AdaBoostClassifier
- https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html#sklearn.ensemble.AdaBoostClassifier)https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html#sklearn.ensemble.AdaBoostClassifier
4.GBDT
梯度提升决策树(GBDT Gradient Boosting Decision Tree)是一种迭代的决策树算法,该算法由多棵决策树组成,所有的树的结论累加起来做最终答案。它在被提出之初就被认为是泛化能力交钱的算法。
GBDT = 梯度下降 + Boosting + 决策树
GBDT的主要执行思想
- 1.使用梯度下降法优化代价函数
- 2.使用一层决策树作为弱学习器,负梯度作为目标值
- 3.利用boosting思想进行集成
5.XGBoost
XGBoost = 二阶泰勒展开 + boosting + 决策树 + 正则化
Boosting:XGBoost使用Boosting提升思想对多个弱学习器进行迭代学习
二阶泰勒展开:每一轮学习中,XGBoost对损失函数进行二阶泰勒展开,使用一阶和二阶梯度进行优化
决策树:在每一轮学习中,XGBoost使用决策树算法作为弱学习进行优化
正则化:在优化过程中XGBoost为防止过拟合,在损失函数中加入惩罚项,限制决策树的叶子节点个数以及决策树叶子节点的值
上一篇: 集成学习实例代码