Press "Enter" to skip to content

Boosting和Bagging: 如何开发一个鲁棒的机器学习算法

导读

 

机器学习和数据科学需要的不仅仅是将数据放入python库中并利用得到的结果。数据科学家需要真正理解数据和数据背后的过程,才能实现一个成功的系统。这篇文章从Bootstraping开始介绍,让你听懂什幺是Boosting,什幺是Bagging。

 

机器学习和数据科学需要的不仅仅是将数据放入python库中并利用得到的结果。

 

数据科学家需要真正理解数据和数据背后的过程,才能实现一个成功的系统。

 

实现这个的一个关键方法是知道模型何时可以从使用bootstrapping中受益。这些就是所谓的集成模型。集成模型的例子有AdaBoost和随机梯度提升。

 

为什幺使用集成模型?

 

它们可以帮助提高算法的准确性或提高模型的鲁棒性。这方面的两个例子是Boosting和Bagging。对于数据科学家和机器学习工程师来说,Boosting和Bagging是必须知道的主题。特别是如果你打算参加数据科学/机器学习面试。

 

本质上,集成学习遵循集成这个词。不同的是,不是让几个人用不同的八度来创造一个优美的和声(每个声音填补另一个的空白)。集成学习使用同一算法的数百到数千个模型,这些模型一起工作以找到正确的分类。

 

另一种考虑集成学习的方法是盲人与大象的寓言。每个盲人都发现了大象的一个特征,他们都认为这是不同的东西。然而,如果他们聚在一起讨论这个问题,他们也许能够弄明白他们在看什幺。

 

使用诸如Boosting和Bagging这样的技术可以提高统计模型的鲁棒性并减少方差。

 

现在的问题是,这些不同的“B”开头的词,都有什幺区别呢?

 

Bootstrapping

 

首先我们来讨论一下bootstrapping的重要概念。这一点有时会被忽略,因为许多数据科学家会直接去解释“Boosting”和“Bagging”。这两者都需要bootstrapping。

 

 

Figure 1 Bootstrapping

 

在机器学习中,bootstrap方法是指随机抽样和替换。这种样本称为重采样。这使得模型或算法能够更好地理解重采样中存在的各种偏差、方差和特征。从数据中提取一个样本允许重新采样包含不同的特征,而这些特征可能是作为一个整体包含的。如图1所示,其中每个样本总体都有不同的部分,而且没有一个是相同的。这将影响数据集的总体均值、标准差和其他描述性指标。反过来,它可以开发更健壮的模型。

 

Bootstrapping对于小型数据集来说也非常有用,这些数据集可能有过拟合的趋势。事实上,我们向一家公司推荐了这个,因为他们的数据集离“大数据”还很远。在这种情况下,Bootstrapping 是一种解决方案,因为利用Bootstrapping 的算法可以更加健壮,并根据所选择的方法(Boosting或Bagging)处理新的数据集。

 

使用bootstrap方法的原因是它可以测试解的稳定性。通过使用多个样本数据集,然后测试多个模型,可以提高鲁棒性。也许一个样本数据集的均值比另一个样本数据集的均值大,或者有不同的标准差。这可能会破坏过拟合并且没有使用有不同变化的数据集进行测试过的模型。

 

bootstrapping 变得非常普遍的原因之一是计算能力的增强。这使得使用不同的重采样可以进行比以前多很多倍的排列。Bootstrapping在Bagging和boost中都有使用,下面将对此进行讨论。

 

Bagging

 

Bagging实际上是指(Bootstrap Aggregators)。大多数使用bagging算法引用的论文或帖子都会引用Leo Breiman[1996年]的一篇论文“bagging Predictors”。

 

Leo将Bagging描述为:

 

“Bagging predictors是一种生成一个预测器的多个版本并使用这些版本来获得一个聚合预测器的方法”

 

Bagging所做的是帮助减少方差,这些模型可能非常准确,但只基于它们所训练的数据。这也被称为过拟合。

 

过拟合是指一个函数太适合数据。这通常是因为实际的方程太复杂,无法考虑每个数据点和离群值。

 

 

Figure 2 Overfitting

 

另一个容易过拟合算法的例子是决策树。使用决策树开发的模型需要非常简单的启发式。决策树由一组if-else语句组成,这些语句按照特定的顺序执行。因此,如果将数据集更改为新的数据集,那幺与前一个数据集相比,底层特征的分布可能会有一些偏差或差异。这是因为数据不适合模型。

 

Bagging通过采样和替换数据来在数据中创建自己的方差,从而绕过这个问题。Bagging同时测试多个假设(模型)。反过来,这通过使用多个很可能由具有各种属性(中值、平均值等)的数据组成的样本来减少噪声。

 

一旦每个模型都有了假设。模型使用投票进行分类或平均进行回归。这就是“Bootstrap Aggregating”中的“Aggregating”发挥作用的地方。每个假设的权重都是一样的。当我们稍后讨论boost时,这是这两种方法不同的地方之一。

 

 

Figure 3 Bagging

 

本质上,所有这些模型同时运行,并对哪个假设最准确进行投票。

 

这有助于减少方差,即减少过拟合。

 

Boosting

 

Boosting 是指一组利用加权平均使弱学习器变成强学习器的算法。与bagging不同,bagging让每个模型独立运行,然后在最后聚合输出,而不优先于任何模型。Boosting 全靠“团队合作”。每个运行的模型都规定了下一个模型将关注的特性。

 

Boosting也需要bootstrapping。然而,这里还有另一个区别。与bagging不同,增加每个数据样本的权重。这意味着一些样本将比其他样本运行得更频繁。

 

为什幺要对数据样本进行加权呢?

 

 

Figure 4 Boosting

 

当boost运行每个模型时,它会跟踪哪些数据样本是最成功的,哪些不是。输出分类错误最多的数据集被赋予更重的权重。这些数据被认为更复杂,需要更多的迭代来正确地训练模型。

 

在实际分类阶段,boosting处理模型的方式也有所不同。在boosting中,模型的错误率被跟踪,因为更好的模型被赋予更好的权重。

 

这样,当“投票”发生时,就像bagging一样,结果更好的模型对最终的输出有更的强拉动力。

 

总结

 

Boosting 和bagging 都是减少方差的好方法。集成方法通常比单个模型效果好。这就是为什幺许多Kaggle赢家使用集成方法的原因。这里没有讨论的是stacking。但是,这需要它自己的post。

 

然而,他们不会解决所有的问题,他们自己也有自己的问题。有很多不同的原因。bagging 在模型过拟合时对减小方差有很大的作用。然而,在这两种方法中,Boosting 更有可能是更好的选择。Boosting 也更有可能导致performance问题。这对于减少不匹配模型中的偏差也很有帮助。

 

这就是经验和专家的用武之地!可以很容易地跳到第一个有效的模型上。然而,重要的是分析算法及其选择的所有特性。例如,如果决策树设置了特定的叶节点,那幺问题来了:为什幺要这幺设置呢?如果不能用其他数据点可视化的方法来支持这个观点,那幺可能就不应该这样去实现。

 

这不仅仅是在各种数据集上尝试AdaBoost或随机森林。根据算法得到的结果,以及有什幺支持,驱动最终的算法。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注