当前位置: 首页 > 科技观察

Boosting和Bagging:如何开发强大的机器学习算法

时间:2023-03-12 19:02:55 科技观察

简介机器学习和数据科学需要的不仅仅是将数据放入Python库并利用结果。数据科学家需要真正理解数据和数据背后的过程,才能实施成功的系统。本文从Bootstraping入手,让大家了解什么是Boosting,什么是Bagging。机器学习和数据科学需要的不仅仅是将数据放入Python库并利用结果。数据科学家需要真正理解数据和数据背后的过程,才能实施成功的系统。实现这一目标的一个关键方法是了解模型何时可以从使用引导程序中受益。这些是所谓的集成模型。集成模型的示例是AdaBoost和随机梯度提升。为什么要使用集成模型?它们可以帮助提高算法的准确性或增加模型的稳健性。这方面的两个例子是Boosting和Bagging。Boosting和Bagging是数据科学家和机器学习工程师必须了解的主题。特别是如果您要参加数据科学/机器学习面试。本质上,集成学习遵循集成这个词。不同之处在于没有几个人在不同的八度音阶中创造出美妙的和声(每个声音都填补了另一个声音的空白)。集成学习使用成百上千个相同算法的模型协同工作以找到正确的分类。另一种思考集成学习的方式是盲人和大象的寓言。每个盲人都发现了大象的一个特征,他们都认为这是不同的。然而,如果他们聚在一起讨论这个问题,他们也许能够弄清楚他们在看什么。使用Boosting和Bagging等技术可以提高统计模型的稳健性并减少方差。现在的问题是,这些以“B”开头的不同单词有什么区别呢?Bootstrapping首先,让我们讨论一下Bootstrapping的重要概念。这一点有时会被忽视,因为许多数据科学家直接解释“Boosting”和“Bagging”。这两个都需要引导。图1Bootstrapping在机器学习中,bootstrap方法是指随机抽样和替换。这种采样称为重采样。这允许模型或算法更好地理解重采样中存在的各种偏差、方差和特征。从数据中抽取样本允许重新抽样以包含可能作为一个整体包含的不同特征。如图1所示,每个样本总体都有不同的部分,而且没有一个是相同的。这会影响数据集的总体均值、标准差和其他描述性指标。反过来,它可以开发更强大的模型。Bootstrapping对于可能有过度拟合倾向的小型数据集也非常有用。事实上,我们向一家数据集远非“大数据”的公司推荐了这个。在这种情况下,Bootstrapping是一种解决方案,因为使用Bootstrapping的算法可以更健壮,并根据所选方法(Boosting或Bagging)处理新数据集。使用bootstrap方法的原因是它可以测试解决方案的稳定性。可以通过使用多个样本数据集然后测试多个模型来提高稳健性。也许一个样本数据集的均值比另一个大,或者标准差不同。这可能会破坏过度拟合且未使用数据集的不同变体进行测试的模型。自举变得如此普遍的原因之一是计算能力的提高。这使得排列比使用不同的重采样之前多很多倍。Bootstrapping用于bagging和boost,这将在下面讨论。BaggingBagging实际上是指(BootstrapAggregators)。大多数使用bagging算法引用的论文或帖子都会引用LeoBreiman[1996]的论文“baggingPredictors”。Leo将Bagging描述为:“Bagging预测器是一种生成多个版本的预测器并使用这些版本来获得聚合预测器的方法”Bagging所做的是帮助减少方差,这些模型可以非常准确,但仅基于数据他们受过训练。这也称为过度拟合。过度拟合是指函数太适合数据。这通常是因为实际方程过于复杂,无法解释每个数据点和异常值。图2过度拟合另一个容易过度拟合的算法示例是决策树。使用决策树开发的模型需要非常简单的启发式方法。决策树由一组按特定顺序执行的if-else语句组成。因此,如果将数据集更改为新数据集,则与之前的数据集相比,基础特征的分布可能存在一些偏差或差异。这是因为数据不适合模型。Bagging通过采样和替换数据来创建自己的数据差异来解决这个问题。Bagging同时测试多个假设(模型)。反过来,这通过使用可能由具有各种属性(中值、均值等)的数据组成的多个样本来减少噪声。一旦每个模型都有假设。模型使用投票进行分类或平均进行回归。这就是“Bootstrap聚合”中的“聚合”发挥作用的地方。每个假设的权重相等。这是我们稍后讨论boost时这两种方法的不同之处之一。图3Bagging本质上,所有这些模型同时运行并投票选出最准确的假设。这有助于减少方差,即减少过度拟合。BoostingBoosting是指一组使用加权平均将弱学习器变成强学习器的算法。与bagging不同,bagging让每个模型独立运行,然后在最后聚合输出,而不对任何模型进行优先级排序。提升就是“团队合作”。每个模型运行都决定了下一个模型将关注哪些特征。提升还需要引导。但是,这里还有另一个区别。与bagging不同的是,增加了每个数据样本的权重。这意味着某些样本将比其他样本运行得更频繁。为什么要对数据样本进行加权?图4Boosting当boost运行每个模型时,它会跟踪哪些数据样本最成功,哪些不成功。输出错误分类最多的数据集被赋予较重的权重。此数据被认为更复杂,需要更多迭代才能正确训练模型。在实际的分类阶段,boosting也以不同的方式处理模型。在提升中,随着更好的模型被赋予更好的权重,模型的错误率被跟踪。这样,当“投票”发生时,就像bagging一样,结果更好的模型对最终输出的拉动更强。总结Boosting和bagging都是减少方差的好方法。集成方法通常比单个模型表现更好。这就是为什么许多Kaggle获胜者使用集成方法的原因。这里不讨论的是堆叠。但是,这需要自己的帖子。然而,它们并不能解决所有问题,它们也有自己的问题。有很多不同的原因。当模型过拟合时,Bagging对减少方差有很大的作用。然而,在这两种方法中,Boosting更有可能是更好的选择。提升也更有可能导致性能问题。这也有助于减少不匹配模型中的偏差。这就是经验和专业知识的用武之地!很容易跳到第一个有效的模型。但是,重要的是要分析算法的所有属性及其选择。例如,如果决策树设置了特定的叶子节点,那么问题就来了:为什么要这样设置?如果其他数据点可视化不能支持这个想法,那么它可能不应该那样做。这不仅仅是在各种数据集上尝试AdaBoost或随机森林。根据算法得到的结果,以及有什么支撑,驱动最终的算法。