一、集成学习简介
1.什么是集成学习?
集成学习(Ensemble Learning)是一种机器学习方法,通过将多个弱学习器(weak learner)组合在一起来构建一个更强大的学习器(strong learner)。
在集成学习中,弱学习器通常是指在某种程度上性能较低的学习算法或模型,例如决策树的深度较浅、学习速度较快的版本。而强学习器则是指整个集成模型的性能更好、更具泛化能力的学习器。
集成学习的核心思想是通过组合多个弱学习器的预测结果来获得更准确、稳定的预测结果。常见的集成学习方法包括以下几种:
- 好而不同的个体学习器的结合:
- 基于投票的方法:如多数投票、加权投票等,最终预测结果取决于多个弱学习器的投票结果。
- 基于平均的方法:如平均法、加权平均法等,最终预测结果取决于多个弱学习器的平均预测值。
- 以序列化方式生成多个个体学习器:
- Boosting:通过迭代训练多个弱学习器,每个弱学习器都在前一个弱学习器的基础上进行训练,更关注被前一个弱学习器错误分类的样本。
- AdaBoost、Gradient Boosting等是常见的Boosting方法。
- 以并行方式生成多个个体学习器:
- Bagging:通过自助采样法从原始训练集中有放回地随机采样出多个子训练集,然后每个子训练集上训练一个弱学习器,最终将多个弱学习器的结果进行投票或平均得到最终预测结果。
- 随机森林是基于Bagging思想的一种常见方法,使用决策树作为弱学习器。
集成学习能够通过组合多个弱学习器的优势,提高预测准确性、降低过拟合风险,并且通常具有更好的泛化能力。它被广泛应用于各种机器学习任务和领域,取得了很好的效果。
2.机器学习的两个核心任务
- 任务一:如何优化训练数据—>主要用于解决欠拟合问题
- 任务二:如何提升泛化性能—>主要用于解决过拟合问题
3.集成学习中Boosting和Bagging
在集成学习中,Boosting和Bagging是两种常见的生成个体学习器的方法。
- Boosting(提升法): Boosting是一种序列化的集成学习方法,通过迭代地训练多个弱学习器,每个弱学习器都在前一个学习器的基础上进行训练,重点关注前一个学习器分类错误的样本。Boosting的核心思想是通过不断调整样本权重来提高集成模型的性能。常见的Boosting算法包括AdaBoost(自适应Boosting)、Gradient Boosting(梯度提升)等。
- Bagging(自助采样法): Bagging是一种并行的集成学习方法,通过自助采样法(有放回地随机采样)从原始训练集中产生多个不同的子训练集,并在每个子训练集上训练一个独立的弱学习器。最终的预测结果是基于多个弱学习器的平均或投票结果。
Boosting方法在每一轮迭代中都会关注错误分类的样本,逐步提高模型的性能;而Bagging方法通过并行训练多个弱学习器,通过组合多个模型的结果来减小方差。这两种方法都在实际中取得了良好的效果,并在不同的场景中得到了广泛应用。
二、Bagging和随机森林
随机森林(Random Forest)是基于Bagging思想的一种常见方法。它使用决策树作为弱学习器,在每个决策树的训练过程中,除了采用自助采样法对样本进行采样,还在每个节点的特征选择时随机选取一部分特征进行考虑。最终的预测结果是基于所有决策树的投票结果或平均结果。
1.Bagging集成原理
目标:把下面的图和方块进行分类
1)采样不同数据集
2)训练分类器
3)平权投票,获取最终结果
4)主要实现过程小结
2.随机森林构造过程
随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。
随机森林=Bagging+决策树
随机森林的构造过程:
- 数据集采样: 从原始训练集中进行有放回地随机采样(自助采样)生成多个子训练集。每个子训练集的大小与原始训练集相同,但其中可能包含重复的样本,也可能存在部分样本未被采样到。
- 决策树构建: 对于每个子训练集,独立地构建一个决策树。在构建决策树时,通常采用以下策略:
- 针对每个节点,在候选特征集合中随机选择一个固定数量的特征子集。这样做的目的是增加决策树节点的随机性,避免过于依赖单一特征。
- 根据选择的特征子集,使用某种分割准则(如基尼指数或信息增益)选择最佳分割特征和阈值。
- 重复递归地在每个子节点上应用上述步骤,直到满足终止条件,如达到最大深度、节点样本数量小于阈值或节点纯度达到一定程度。
- 预测结果集成: 对于分类任务,通过对所有决策树的预测结果进行投票,选择出现最多次数的类别作为最终的集成预测结果。 对于回归任务,将所有决策树的预测结果进行平均得到最终的集成预测结果。
为什么要随机抽取训练集?
- 如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样的
为什么要有放回地抽样?
- 如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的。这样每棵树都是“有偏的”,都是绝对”片面的“,也就是说每棵树训练出来都是有很大的差异的;而随机森林最后分类取决于多棵树的投票表决。
3.包外估计(Out-of-Bag Estimation)
包外估计(Out-of-Bag Estimation)是随机森林中一种用于评估模型性能的技术。在构建每棵决策树时,由于自助采样的特性,约有三分之一的样本未被用于构建该决策树。包外估计利用这部分未被采样的样本来评估模型的预测性能。
具体步骤如下:
- 对于每个样本,记录它在哪些决策树的构建中未被采样(即未包含在训练集中)。
- 对于每棵决策树,使用未被采样的样本作为验证集,进行预测。
- 对于每个样本,统计它在未被采样的决策树中的预测结果。
- 对所有未被采样的样本,计算它们的平均预测结果。
对于分类任务,可以计算每个样本的预测类别与真实类别的准确率或混淆矩阵等评价指标。
对于回归任务,可以计算每个样本的预测值与真实值的均方误差等指标。
包外估计提供了一种无需额外验证集的方法来评估随机森林模型的性能,可以有效地利用训练数据,并为模型的泛化能力提供一个较为准确的估计。
4.随机森林的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:树的最大深度,无默认值
- bootstrap:是否在构建树时采用放回抽样
- min_samples_split:内部节点再划分所需最小样本数,默认值为2
- 这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split的值,则不会继续再尝试选择最优特征来进行划分.
- 如果样本数不大,不需要管这个值。如果样本数特别大,建议增大这个值
- min_sample_leaf:叶子节点的最小样本数,默认值为1
- 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于min_samples_split的值,则会和兄弟节点一起被剪枝。
- 较小的叶子使模型更容易捕捉训练数据中的噪声
- min_impurity_split:节点划分的最小不纯度
- 这个值限制了决策树的增长,如果某节点的不纯度小于这个阈值,则该节点不再生成子节点,
- max_features=“auto”:每个决策树的最大特征数量
- 值为”auto“:把总特征数量的平方根作为每个决策树的最大特征数量
- 值为”sqrt“:把总特征数量的平方根作为每个决策树的最大特征数量
- 值为”log2“:计算以2为底总特征数量的对数,并将结果作为每个决策树的最大特征数量
- 值为”None“:每个决策树的特征数量就是总特征数量
上面参数中最重要的有:
- 最大特征数:max_features
- 最大深度:max_depth
- 内部节点再划分所需最小样本数:min_samples_split
- 叶子节点的最小样本数:min_sample_leaf
5.Bagging集成优点
Bagging + 决策树/线性回归/逻辑回归/深度学习… = Bagging集成学习方法
- 均可在原有算法上提高约2%左右的泛化正确率
- 简单、方便、通用