1、个体与集成
集成学习通过构建并结合多个学习器来完成学习任务,也被称为多分类器系统、基于委员会的学习等。对于弱学习器,集成学习可获得比单一学习器显著优越的泛化性能。
2、集成学习的种类
1)个体学习器之间存在强依赖关系、必须串行生成的序列化方法,代表:Boosting;
2)个体学习器之间不存在强依赖关系、可同时生成的并行化方法代表:Bagging和随机森林。
3、Boosting
1)可将弱学习器提升为强学习器;
2)工作机制:先从初始训练集训练处一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器,重复可得T个基学习器,然后加权结合;
3)常见的采用树形分类器(决策树),但是这和随机森林并不同。其中,决策树分为分类树和回归树,分类树用于分类问题,回归树用于回归问题。分类树在分叉时,考虑的指标是熵有关的指标,例如信息增益、信息增益比等,而回归树主要采用预测值与真实值之间的差距度量指标,例如平方误差等。
4)AdaBoost:
(1)核心思想:采用带权值的数据样本和带权值的基分类器来调整分类器对错误分类情况的改进。具体的,在每轮迭代后,会将本次迭代产生的基分类器所分类错误的数据的权重加大,以使下一轮分类器分类时更多关注这些错误样本。并且本轮迭代产生的基分类器会根据错误率被赋予一个权值,决定其在整个集成模型中的话语权。最终预测新样本的Label时,是将所有基分类器的预测结果加权相加得到。
(2)主要特点:基分类器是树桩,也就是只有一层分叉;每个树杈的分叉准则是错误样本率,即找出分类错误率最小的分叉方式进行分叉。
(3)一般用于分类问题,不用于回归。、
5)BoostingTree:
(1)核心思想:将本轮产生的基分类器所剩余的拟合误差作为下一轮迭代的Label值。
(2)采用决策树,采用CART回归树。
(3)没有使用梯度,收敛速度慢。
6)GBDT
(1)核心思想:为分类或回归问题构建损失函数,并以损失函数的导数的反方向为下一轮迭代的建树方向。具体的,将loss函数求导,然后取负作为下一轮训练的Label。
(2)采用CART回归树,区别于BoostingTree的:分叉后的样本纯度指标是loss函数,不局限于方差。
7)Voting
硬投票:对预测类别进行投票;
软投票:对预测概率进行求均值。
上述内容为整理得到,具体的可以参考:Boosting集成算法总结(无公式版) - 知乎
4、Bagging
1)即套袋法,采用自助采样法的集成学习算法。自助采样法是一种有放回的抽样方法,目的为了得到统计量的分布以及置信区间。
2)具体过程:从原始样本集中抽取训练集,共k轮,得到k个训练集。每次使用一个训练集得到一个模型,k个训练集共得到k个模型。其中:
(1)对分类问题:将上步得到的k个模型采用投票的方式得到分类结果,若分类预测时两类获得相同票数时,最简单的方法是任选其一。
(2)对回归问题:计算上述模型的均值作为最后的结果。
3)随机森林,是Bagging的一个扩展变体。
5)随机森林
1)假如有N个样本,则有放回的随机选择N个样本,然后返回继续选择,选择好的N个样本用来训练一个决策树,作为决策树根节点处的样本。
2)假如有M个属性,在每个节点需要分裂的时候,随机从M个属性中选取m个属性,满足条件m远小于M,然后从m个中采取信息增益或者其他指标,选择一个属性作为分裂属性。
3)节点分裂到不能分裂为止。
4)按照前三个步骤建立大量的决策树,就构成了随机森林。
上述内容为整理得到,具体的可以参考:集成学习-bagging_杰公子的博客-CSDN博客_集成学习bagging
5、代码实现部分:
1)Bagging:
特点:训练集的采样,常见的为从行(样本)维度进行采样,这里进行的是有放回采样
# Bagging用于分类的模块
from sklearn.ensemble import BaggingClassifier
# Bagging用于回归的模块
from sklearn.ensemble import BaggingRegressor
# 创建样例数据集的模块
from sklearn.datasets import make_classification
# 创建样例数据集
X, y = make_classification(random_state=1)
# 创建bagging模型示例,n_estimators指定创建的树的数量
model = BaggingClassifier(n_estimators=50)
2)随机森林
特点:集成在训练集的不同引导样本上拟合决策树;对每个数据集的特征(列)进行采样
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
X, y = make_classification(random_state=1)
model = RandomForestClassifier(n_estimators=50)
3)Voting
通过VotingClassifier和VotingRegressor使用。
具体可以参考链接:常见集成学习及其代码实现_奥瑞给给~~的博客-CSDN博客_集成学习代码