Python 中的 Adaboost 算法:简介

Adaboost是Adaptive Boosting的缩写,是一种机器学习算法,因其高精度和高效率而受到广泛欢迎。它是一种集成学习方法,结合多个弱分类器来创建强分类器。在本文中,我们将讨论 Adaboost 算法并提供一个示例来帮助您更好地理解其工作原理。


Adaboost算法概述

Adaboost 算法的工作原理是在数据集上迭代训练一组弱分类器,并将它们组合成一个强分类器。每个弱分类器都在数据集的子集上进行训练,最终输出是弱分类器的加权组合。分配给每个弱分类器的权重基于其准确性,更准确的分类器被赋予更高的权重。

Adaboost算法可以分解为以下步骤:

  1. 将每个训练实例的权重初始化为 1/n,其中 n 是训练实例的数量。
  2. 在训练数据上训练弱分类器。
  3. 评估弱分类器的性能并调整训练实例的权重。被弱分类器错误分类的实例被赋予更高的权重,以使它们在后续迭代中更重要。
  4. 重复步骤 2 和 3 指定的迭代次数或直到达到所需的准确度水平。
  5. 通过计算弱分类器预测的加权和,将弱分类器组合成强分类器。分配给每个弱分类器的权重基于其对训练实例进行分类的准确性。

通过例子理解Adaboost

为了更好地理解 Adaboost 算法,让我们考虑一个简单的例子。假设我们有一个包含 10 名患者的数据集,我们希望根据每个患者的年龄和血压来预测他们是否患有某种健康状况。

我们的数据集如下所示:

年龄 血压 健康)状况
35 120/80 是的
47 130/90
26 110/70 是的
52 140/95 是的
31 115/75
45 125/85
29 105/65 是的
56 150/100 是的
39 125/80
41 130/85 是的
此问题陈述的简单数据集

我们可以使用具有年龄单分割的决策树在此数据集上训练弱分类器。决策树可以仅根据患者的年龄来预测患者是否患有该疾病。

训练弱分类器后,我们评估其性能并调整训练实例的权重。假设弱分类器正确预测了第一个患者(35 岁)的病情,但错误分类了第二个患者(47 岁)。然后,我们将为第二个患者分配更高的权重,使其在后续迭代中更加重要。

然后,我们重复此过程指定的迭代次数或直到达到所需的准确度水平。在每次迭代中,我们训练一个新的弱分类器,并根据先前分类器的性能调整训练实例的权重。

最后,我们通过计算弱分类器预测的加权和将弱分类器组合成强分类器。分配给每个弱分类器的权重基于其对训练实例进行分类的准确性。


在 Python 中实现 Adaboost

让我们尝试实现这个非常简单的示例,与之前的 python 示例相同。

1.导入必要的库

from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

2. 创建样本数据集并分割训练集和测试集

# define the dataset
X = [[35, 120, 80], [47, 130, 90], [26, 110, 70], [52, 140, 95], [31, 115, 75],
     [45, 125, 85], [29, 105, 65], [56, 150, 100], [39, 125, 80], [41, 130, 85]]
y = [1, 0, 1, 1, 0, 0, 1, 1, 0, 1]
 
# split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

3. 定义模型

然后,我们定义DecisionTreeClassifier最大深度为 1 的弱分类器,并用它来定义AdaBoostClassifier具有 10 个估计器的模型。我们使用该方法将 Adaboost 模型拟合到训练数据fit

# define the weak classifier
dt = DecisionTreeClassifier(max_depth=1)
 
# define the Adaboost model and fit it to the training data
adaboost = AdaBoostClassifier(base_estimator=dt, n_estimators=10, random_state=5)
adaboost.fit(X_train, y_train)

4. 预测输出

然后我们使用该predict方法对测试数据进行预测,并使用该accuracy_score函数计算 Adaboost 模型的准确性。最后,我们打印模型的准确性。

# make predictions on the testing data
y_pred = adaboost.predict(X_test)
print("Test set:",X_test)
print("Predicted value:",y_pred)
# calculate the accuracy of the Adaboost model
accuracy = accuracy_score(y_test, y_pred)
 
# print the accuracy
print("Accuracy:", accuracy)

输出如下所示:

如果我们查看与第一组对应的期望值,输出应该是 0,这在这里是正确的。但对于第二种情况,预期值应为 0,预测输出为 1。由于我们采用的数据集非常小,只有 10 个示例,因此模型的准确度为 50%。在实际情况下,与其他分类器相比,数据集会更大,并且 Adaboost 分类器对应的准确度通常会更高,


有关 Adaboost 分类器的更多信息

我们可以看到 AdaBoostClassifier 与一些估计器项一起使用。但这些术语到底是什么?让我们了解更多相关信息。

AdaBoostClassifier 函数有几个可用于自定义模型的参数。

  1. base_estimator:此参数指定用作基础估计器的弱学习器。在代码示例中,我们DecisionTreeClassifier通过设置 指定最大深度为 1 的 a 作为我们的弱学习器base_estimator=dt
  2. n_estimators:该参数指定模型中使用的弱学习器的数量。
  3. random_state:该参数用于初始化模型使用的随机数生成器。通过设置random_state=42,我们确保模型使用固定的随机种子进行初始化。

您可以在其Wikipedia 页面上查看有关 Adaboost 算法的更多详细信息


主要优势

  1. 多种类型数据集的高精度
  2. 灵活适应不同类型的问题和基本分类器,如支持向量机、决策树
  3. 防止过度拟合以及对噪声数据和异常值的鲁棒性
  4. 易于实施并在许多图书馆中广泛使用
  5. 通过特征重要性分析生成可解释的模型
  6. 对于分类和回归任务均有效。

结论

总体而言,AdaBoost 是一种强大而灵活的算法,可用于许多不同类型的数据集和基分类器。它防止过度拟合和生成可解释模型的能力使其成为许多机器学习任务的流行选择。

总而言之,Adaboost算法是一种强大的机器学习算法,它结合了多个弱分类器来创建一个强分类器。它的工作原理是在数据集上迭代训练弱分类器并调整训练实例的权重

另请阅读:
  1. 朴素贝叶斯分类器
  2. 决策树分类器