龙空技术网

AdaBoost算法:功能强大,但有一个有趣的局限性

闻数起舞 579

前言:

现在姐妹们对“c实现adaboost算法”大概比较重视,各位老铁们都想要了解一些“c实现adaboost算法”的相关文章。那么小编同时在网络上汇集了一些关于“c实现adaboost算法””的相关内容,希望小伙伴们能喜欢,看官们一起来学习一下吧!

机器学习, 自适应升压算法的直观解释及其与基于其他决策树的机器学习算法的差异

索尔·多比拉斯

8分钟阅读

> Image by author.

介绍

机器学习算法的数量随着时间的推移而不断增加。如果您想成为一名成功的数据科学家,则必须了解它们之间的区别。

这个故事是系列文章的一部分,在本文中,我将深入研究不同的算法,它们如何工作以及如何在Python中构建它们。

故事涵盖了以下主题:单个决策树,随机森林和AdaBoost之间的模型预测的视觉比较。AdaBoost与其他算法有何不同的说明Python代码示例决策树与随机森林与AdaBoost

让我们开始比较这三个模型中的每一个模型的预测概率面。他们都使用相同的澳大利亚天气数据:

目标(也称为因变量):“明天雨”。可能的值:1(是,下雨)和0(否,不下雨);特征(又称自变量):今天是“下午3点的湿度”,今天是“风速”。注意,我们仅使用两个特征使我们能够轻松地可视化结果。

以下是模型预测平面。请注意,如果您想复制这些图形,则可以在本故事的最后一节中使用Python代码。

1.Decision Tree (1 tree, max_depth=3);

2.Random Forest (500 trees, max_depth=3);

3.AdaBoost (50 trees, max_depth=1).

Images by author.

解释

让我们来解释一下可视化,看看它们如何告诉我们这些算法的差异。上图中的z轴表示明天下雨的可能性。同时,白色细线是决策边界,即下雨的概率= 0.5。

在进入AdaBoost之前,我们现在将快速回顾CART和Random Forest。

1.单一决策树(CART)

CART是标准决策树算法的首字母缩写,代表分类树和回归树。在此示例中,我们构建了一个决策树,决策树深入3层,有8个叶子。这是供参考的确切树:

> CART decision tree. Image by author.

这棵树上的每一片叶子都给我们明天下雨的可能性,这是下雨的案例数与该叶子内观察总数之间的比率。例如,左下角的叶子使我们明天下雨的可能性为6%(2,806 / 46,684)。

每片叶子对应于3D预测图中的平坦表面,而树中的拆分是阶跃变化。请参见下图。

> CART decision tree and its corresponding predictions. Image by author.

正如您所看到的,这是一棵非常简单的树,给我们提供了8个不同的概率。其中5个叶子导致明天没有下雨的预测(概率<0.5),而剩余的3叶表明明天将下雨(概率> 0.5)。

2.随机森林

首先要注意的是,在我们的案例中,Random Forest对其基本估算器使用相同的CART算法。但是,有一些主要差异:

它构建许多随机树,并结合每个单独树的预测以生成最终预测。它使用引导程序(带替换的采样)从原始数据创建许多采样。这些样本保持相同大小,但观测值分布不同。最后,它使用特征随机性来最小化树之间的相关性。这是通过在每个节点拆分时仅使算法的可用随机子集完成的。

最后,Random Forest创建了许多树(在我们的示例中为500棵),并根据每棵树的预测来计算总体概率。这就是为什么与单棵树相比,预测平面表面更平滑的原因(即,它具有许多小步长而不是一些大步长)。

> Random Forest prediction plane. Image by author.

3. AdaBoost

最后,我们得出了这个故事的主题。

像随机森林一样,我们使用CART作为自适应升压算法内的基础估计。但是,如果需要,Adaboost也可以使用其他估算器。

AdaBoost的核心原理是使一系列弱学习者(例如决策树桩)适合重复修改的数据版本。决策树桩是仅深一层的决策树,即它仅包含一个根节点和两个(或更多)叶子。这是AdaBoost模型中3个独立决策树的示例:

> Three decision stumps. Image by author.

与随机森林(Random Forest)相似,所有弱学习者(在这种情况下为树桩)的预测都通过加权多数投票进行组合,以得出最终预测。但是,主要区别在于这些弱学习者的产生方式。

增强迭代包括将权重应用于每个训练样本(观察值)。最初,这些权重在所有观测值中都是相等的,因此第一步是训练原始数据的弱学习者。

将此链接到我们的示例中,这意味着第一个决策stump(第一个拆分)与使用单个决策树方法的方法相同:

> Single Decision Tree vs. the first decision stump in AdaBoost. Image by author.

对于每个连续的迭代,将分别修改样本权重,并将学习算法重新应用于重新加权的数据。在上一步中错误预测的那些训练示例的权重增加了。同时,正确预测的对象的权重降低了。因此,每个随后的弱学习者因此不得不专注于先前的学习者遗漏的例子。

最后,将所有弱学习者组合成最终预测会生成预测的“更扁平”分布。这是因为该算法故意降低了最可信示例的权重,并将重点转移到了难以分类的示例上。结果,我们在下图中显示了模型预测。

> AdaBoost prediction plane. Image by author.

请注意,您添加的学习者(树桩)越弱,预测分布就变得越“扁平”。

预测分布

可视化预测分布的另一种方法是使用简单的频率折线图。不出所料

单个决策树几乎没有间隔预测。随机森林显示的预测分布更加均匀。AdaBoost的所有预测都位于决策边界附近(为0.5)。表现

虽然这三种方法产生了非常不同的概率分布,但最终的分类结果却非常相似。可以用许多方法来评估性能,但是为了简单起见,我仅在此处(在测试样本上)显示准确性:

单一决策树:82.843%随机森林:83.202%Adaboost:83.033%

尽管可以通过一些附加的超参数优化来稍微提高性能,但上述结果的相似性告诉我们,我们已经非常接近提取所用特征中包含的最大信息。

AdaBoost局限性

AdaBoost产生的“平坦”概率分布是其主要限制。根据您的用例,可能对您来说不是问题。假设您只关心分配正确的类别,那么预测概率就不太重要了。

但是,如果您更关心概率本身,则可能要使用随机森林,它为您提供了9%或78%之类的概率预测,如上面的降雨预测模型所示。这与AdaBoost相反,后者的所有预测都接近50%。

Python部分

现在我们知道了AdaBoost的工作原理,并且了解了它与其他基于树的建模方法的区别,让我们建立一个模型。

设置

我们将使用以下数据和库:

来自卡格勒的澳大利亚天气数据Scikit-learn库,用于将数据分为训练样本,建立AdaBoost模型和模型评估进行数据可视化Pandas和Numpy用于数据处理

让我们导入所有库:

然后,我们从Kaggle获得了澳大利亚的天气数据,您可以通过以下链接下载该数据:https://。

我们提取数据并导出一些新变量以供模型使用。

> A snippet of Kaggle’s Australian weather data with some modifications. Image by author.

接下来,让我们按照以下步骤构建模型:

步骤1 —选择模型特征(自变量)和模型目标(因变量)第2步-将数据分为训练样本和测试样本步骤3 —设置模型参数并训练(拟合)模型步骤4 –使用我们的模型预测火车上的班级标签并测试数据步骤5 —生成模型摘要统计信息

上面的代码生成以下输出,总结了模型的性能。

> AdaBoost model performance. Image by author.

与训练数据相比,该模型在测试数据上具有相似的性能,泛化效果很好。估计量为50,这意味着最终模型由50个不同的决策树组成。

最后,正如所承诺的那样,这里是生成3D预测平面图的代码:

结论

我衷心希望这个故事能够帮助您为用例选择正确的算法。感谢您的阅读,并随时在您自己的Data Science项目中使用以上代码和材料。

干杯!sauldobilas.

(本文由闻数起舞翻译自Dimitris Poulopoulos的文章《AdaBoost Algorithm: Remarkably Capable But With One Interesting Limitation》,转载请注明出处,原文链接:)

标签: #c实现adaboost算法