机器学习算法-集成学习

概念

集成学习是一种机器学习方法,它通过构建并结合多个机器学习器(基学习器)来完成学习任务。集成学习的潜在思想是即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来。集成学习通常被视为一种元算法(meta-algorithm),因为它不是单独的机器学习算法,而是一种通用的策略,可以应用于各种不同类型的机器学习算法。

集成学习的特点

  1. 使用多种兼容的学习算法或模型来执行单个任务,目的是为了得到更佳的预测表现。
  2. 通过构建并结合多个学习器(基学习器)来完成学习任务,以此来提高整体性能。
  3. 集成学习的主要方法可以归类为三大类:Bagging、Boosting和Stacking。
  4. 基于Bagging的算法有例如随机森林,基于Boosting的算法包括Adaboost、GBDT、XGBOOST等。
  5. 集成学习在各个规模的数据集上都有很好的适应性。对于大型数据集,可以划分成多个小数据集,学习多个模型进行组合;对于小型数据集,可以利用Bootstrap方法进行抽样,得到多个数据集,分别训练多个模型再进行组合。

集成学习集成策略

投票法是集成学习中一种常用的策略,主要针对分类问题。它遵循少数服从多数的原则,通过集成多个模型降低方差,从而提高模型的鲁棒性和泛化能力。常见的投票法有绝对多数投票、相对多数投票和加权投票法。

  1. 绝对多数投票:也称为硬投票,是指所有基分类器中,某一类别得票数最多的类别作为最终预测结果。
  2. 相对多数投票:与绝对多数投票不同的是,它是基于概率的投票方法。每一个基分类器都会给出各自预测的概率值,最终选择概率最大的类别作为预测结果。
  3. 加权投票法:每一基分类器的预测结果都会乘以一个权重,最后将各个加权票数求和,得到总票数,选择总票数最高的类别作为预测结果。

集成学习算法类型

集成学习是一种强大的机器学习策略,它通过结合多个独立的模型来提高整体性能。其核心思想是单个分类器可能不好,使用多个分类器可以提高准确性和稳定性。常见的集成算法类型有Bagging、Boosting和Stacking。

  1. Bagging(Bootstrap Aggregating):也被称为自助集结法,它是一种并行式的集成学习算法。Bagging通过自助采样法生成N个样本数相同的子样本,然后训练出N个基分类器。最后,采用投票法(硬投票或软投票)来决定最终的分类结果。此种方法可以降低模型的方差,因此对防止过拟合有很好的效果。随机森林就是一种基于Bagging的集成学习算法。
  2. Boosting:这是一种串行式的集成学习算法。在Boosting中,前一个基分类器分错的样本会被赋予更高的权重,使得后续的基分类器更加关注这些难以分类的样本。此外,每一轮的学习过程中,都会根据上一轮的表现来更新样本的权重。最终,同样采用投票法决定最终的分类结果。Adaboost和GBDT等都是基于Boosting的集成学习算法。
  3. Stacking:也是一种串行式的集成学习算法。与Boosting不同的是,在Stacking中,基分类器的输出被作为输入传给下一个阶段的模型(又称为次级学习器或元分类器),而这个元分类器会基于前面的基分类器的输出来进行最终的预测。Stacking可以结合各种不同类型的基分类器,因此在理论上可以获得非常好的性能。

Bagging 经典代表:随机森林

随机森林是一种基于Bagging的集成学习算法,主要通过结合多个决策树(也称作基分类器)来进行预测,从而提高整体模型的准确性和稳定性。

随机森林的生成过程主要包括两个步骤:自助采样和决策树构建。在自助采样阶段,原始数据集中的数据会被随机抽样出与训练集个数相同的样本,形成若干个子集。这一过程允许同一样本有可能被多次抽取。然后,每一个子集会被用来独立地训练出一个决策树,这样我们就得到了多个基分类器。这些基分类器各自进行学习和预测,他们的预测结果再通过投票或取均值的方式结合起来,得到最终的预测结果。因此随机森林包含了两个随机过程,一个是数据子集的选取,另一个是属性的随机选择。

随机森林也有一些优缺点:

随机森林有很多优点,比如它的表现性能高,准确率极高,并且能够有效地在大数据集上运行。通过引入随机性,随机森林不容易过拟合,而且有很好的抗噪声能力。此外,随机森林能处理很高维度的数据,而无需进行特征选择或降维。它可以处理离散型和连续型数据,不需要对数据集进行规范化。训练速度快是另一个优势,它还能为变量重要性提供排序。随机森林的实现易于并行化,即使面对缺失值问题,也能获得良好的结果。

然而,随机森林也有一些缺点需要注意。例如,当决策树的数量很大时,训练所需的空间和时间可能会非常大,这可能导致模型运行速度减慢。因此,在对实时性有较高要求的场合,可能需要选择其他算法。

Boosting 经典代表(一):AdaBoost

AdaBoost,全称为Adaptive Boosting(自适应增强),是一种迭代算法,通过结合多个弱分类器,形成一个强分类器。其核心思想是针对前一个基本分类器误分类的样本加大权值,并减少正确分类样本的权值,然后再次用来训练下一个基本分类器。

AdaBoost算法的运行过程可以概括为以下几步:

1. 初始化训练数据的权值分布。假设有N个训练样本数据,则每一个训练样本最开始时都被赋予相同的权值:1/N。

2. 训练弱分类器。在每一轮迭代中,加入一个新的弱分类器,直到达到某个预定的足够小的错误率或预先指定的最大迭代次数再确定最后的强分类器。

3. 计算弱分类器的错误率,即分错样本的概率,并根据错误率更新弱分类器的权重。

4. 进行权值更新。依据上一个分类器的权重调整每一个样本的权重,上一次分对的样本权重降低,分错的样本权重提高。

5. 重复上述步骤,直至达到预设的迭代次数或者满足某个终止条件。最后,所有弱分类器的组合形成强分类器。

AdaBoost算法的优缺点:

总的来说,AdaBoost算法的优势在于它能够自动地、适应性地改变每个样本的权重和每个弱分类器的权重,以达到提升整体性能的目标。同时,该算法也具有较好的鲁棒性,能很好地处理噪声数据和异常数据。

AdaBoost算法的优势主要体现在以下几个方面:首先,该算法能够很好地利用弱分类器进行级联,即通过组合多个性能一般的分类器,形成一个性能优秀的强分类器。其次,AdaBoost的灵活性较高,它可以与不同的分类算法结合,作为弱分类器使用。此外,相对于bagging算法和Random Forest算法,AdaBoost在设计上更加精细,它充分考虑了每个分类器的权重。最后,AdaBoost具有很高的精度,它凭借各个分类器的协同作用,可以有效提高预测的准确性。

然而,AdaBoost算法也存在一些不足之处:首先,AdaBoost对噪声数据和异常数据较为敏感,这可能会影响最后的分类效果。其次,由于AdaBoost算法在训练过程中需要反复调用分类器,因此其训练时间较长。再者,当训练数据不平衡时,即各个类别的样本数量存在较大差异时,AdaBoost算法可能无法得到理想的分类效果。

Boosting 经典代表(二):GBDT

GBDT(Gradient Boosting Decision Tree)是一种迭代的决策树算法,主要GBDT(Gradient Boosting Decision Tree)是一种迭代的决策树算法,主要包含三个概念:Regression Decision Tree(即DT),Gradient Boosting(即GB),和Shrinkage。在处理分类或回归问题时,GBDT通过多轮迭代训练一系列的弱分类器,每个分类器都尽可能的去拟合之前所有分类器留下的误差。

而Adaboost和GBDT虽然都是基于加法模型和前向分步算法,但两者在处理错误分类数据的方式上存在较大差异。Adaboost主要是通过提升错分数据点的权重来定位模型的不足,并通过每一次迭代调整样本权重分布使损失函数达到最小。相比之下,GBDT则算梯度(gradient)来定位模型的不足,因此它可以使用更多种类的目标函数。

总的来说,Adaboost和GBDT各有优势和适用场景,但在处理不平衡数据、噪声数据和异常数据时,GBDT通常可以表现得更加鲁棒。

GBDT的训练过程

1. 初始化:首先,确定每个样本的初始值,这个值通常是样本的目标值或者是一个随机数。然后设定树的数量T,学习率α和树的最大深度H。

2. 增加树:对于前面t-1棵树,计算其预测结果与实际值之间的残差。然后,通过拟合残差来训练第t棵树。这一步通常使用CART回归树来实现。值得注意的是,新的树是通过学习之前所有树的残差来构建的,这也是GBDT得名“梯度提升”的原因。

3. 更新模型:每训练完一棵树后,都需要更新当前的模型。对于分类问题,可以使用简单投票法;对于回归问题,则可以计算所有树的预测结果的平均值作为最终预测值。

4. 循环迭代:重复上述步骤T次,即得到T棵完全生长的决策树。需要注意的是,在构建新的树时,需要减小上一次的残差。

GBDT的优缺点

优点:

1. 泛化性能强:GBDT每一次的残差计算都增大了分错样本的权重,而分对的权重都趋近于0,因此其泛化性能比较好。

2. 处理数据类型灵活:可以灵活的处理各种类型的数据。

3. 预测精度高:通过多轮迭代训练一系列的弱分类器,每个分类器都尽可能的去拟合之前所有分类器留下的误差,从而提高预测精度。

缺点:

1. 对异常值敏感:由于GBDT算法在处理数据时会考虑到每一个样本,所以对异常值比较敏感。

2. 并行计算困难:由于分类器之间存在依赖关系,新的树需要基于前面所有树的结果来构建,因此无法进行并行计算,这大大影响了计算效率。

3. 调参复杂、训练时间长:GBDT需要仔细调整参数,而且训练时间可能会比较长。

Boosting 经典代表(三):XGBoost

XGBoost,全称eXtreme Gradient Boosting,是由华盛顿大学研究XGBoost,全称eXtreme Gradient Boosting,是由华盛顿大学研究机器学习的专家陈天奇创建的一种基于Boosting框架的机器学习算法工具包。这种算法既可以用于回归问题,也可以应用于分类和排序问题。

在并行计算效率、缺失值处理、预测性能等方面,XGBoost表现出了非常强大的能力。其基本思想和GBDT相同,但是在实现上做了一系列优化。例如,它采用了二阶导数来使损失函数变得更精确;同时,正则项的使用可以避免模型过拟合的问题。这些优秀的特性使得XGBoost在大规模数据集上运行的效率非常高,并且具有广泛的适用性。

XGBoost的创新之处主要体现在以下几个方面:

首先,目标函数中引入了正则项,降低了模型过拟合的风险。其次,定义了一种新的特征切分指标,该指标利用了损失函数的二阶泰勒展开,提高了模型的准确性。此外,其损失函数变得更为灵活,不再局限于CART的均方误差,只要其二阶可导即可。

在处理大规模数据时,XGBoost表现出了很强的扩展性。它采用sparsity-aware algorithm算法,能够解析稀疏数据。并且,利用加权分位数图作用于有效的树训练和计算。这些特性使得XGBoost在处理大数据时具有很高的效率和准确性。

在工程实现上,XGBoost也做出了一些创新。例如,采用了分块并行(Column Block for Parallel Learning)和缓存访问(Cache-aware Access)的技术,以提高训练速度。同时,还做了特征采样处理,在降低过拟合风险的同时,也提高了模型的训练速度。

总的来说,XGBoost通过以上的一系列创新点,不仅提高了模型的准确性和泛化能力,同时也大大提高了模型的训练速度和效率。这使得XGBoost在各种机器学习任务中都表现出了优秀的性能。

XGBoost VS GBDT

XGBoost和GBDT都是基于Boosting的集成学习算法,它们各自都有一些优点和缺点。

GBDT的优点主要体现在其强大的表达能力,它不需要复杂的特征工程和特征转换,而且能灵活处理各种类型的数据。但是,GBDT也有其明显的缺点。首先,Boosting过程是串行的,难以并行化,这限制了其在大规模数据集上的应用。其次,GBDT在优化时只使用一阶导数信息,这可能会影响模型的准确性。此外,GBDT也不太适合处理高维稀疏特征。

相比之下,XGBoost在许多方面都做出了改进。首先,XGBoost在目标函数中引入了正则项,有效地防止了模型过拟合。其次,XGBoost采用了二阶导数信息来提高模型的准确性。此外,XGBoost还支持线性分类器,相当于带L1和L2正则化项的逻辑斯蒂回归或者线性回归。这使得XGBoost在处理大规模数据集时具有很高的效率和准确性。最后,XGBoost还能够自动利用CPU的多线程进行并行计算,进一步提高了训练速度。

总的来说,虽然GBDT和XGBoost各有优缺点,但是在大多数情况下,由于其高效的训练速度和优秀的预测性能,XGBoost往往被更广泛地应用在各种机器学习任务中。

Stacking 介绍

Stacking,也被称为堆叠,是一种集成学习策略,它主要利用多个不同的基学习器进行模型的集成。其核心思想是,首先将数据集分成训练集和测试集,然后使用训练集训练得到多个初级学习器。接着,让这些初级学习器对测试集进行预测,并将输出值作为下一阶段训练的输入值,最终的标签作为输出值,用于训练次级学习器。

为了尽可能降低过拟合的风险并提高模型的泛化能力,通常在Stacking算法中会采用交叉验证法或留一法来进行训练。同时,为了防止划分训练集和测试集后,测试集比例过小,生成的次级学习器泛化性能不强的问题,我们常常会通过K折交叉验证的方式来确定每个初级学习器的参数。

值得一提的是,Stacking被认为是数据挖掘竞赛中的"大杀器",广泛应用于各种大数据挖掘竞赛中。尽管Stacking严格来说不能称为一种算法,但是它的集成策略却非常精美而复杂。总的来说,Stacking算法的核心就是结合多个简单模型的预测结果来形成一个更强大、更准确的模型。

Stacking算法的优点主要体现在以下几个方面:

首先,它能够结合多个不同的基学习器进行模型的集成,通过这种方式生成了一个新的模型,可以更好地提高预测的准确性。其次,Stacking可以利用多折交叉验证来选择最优的参数,这有助于降低过拟合的风险并提高模型的泛化能力。此外,如果某个一级学习器错误地学习了特征空间的某个区域,那么二级学习器可以通过结合其他一级学习器的学习行为,适当纠正这种错误。

然而,Stacking算法也存在一些缺点。首先,由于Stacking需要使用多折交叉验证,这会使计算过程变得复杂和耗时。其次,Stacking算法要求每个初级学习器都要有一定的准确性,否则次级学习器可能无法很好地纠正初级学习器的错误。此外,如果不合理地设置初级学习和次级学习器的参数,可能会导致模型过拟合。最后,与bagging相比,stacking中的各模型(基分类器)追求的是“准而不同”,过于准确的基学习器可能会使得bagging的集成失去意义。

关于集成学习的更多问题可以提问小策问答

链接:https://pan.baidu.com/s/1quqJQc3AUvcmN0hd_lrCEw?pwd=1234 
提取码:1234 
--来自百度网盘超级会员V4的分享

你可能感兴趣的:(机器学习,算法,集成学习)