个性化阅读
专注于IT技术分析

Python中的AdaBoost分类器

本文概述

近年来, 增强算法在数据科学或机器学习竞赛中得到了广泛的普及。这些比赛的大多数获胜者都使用增强算法来实现高精度。这些数据科学竞赛为学习, 探索和提供各种商业和政府问题的解决方案提供了全球平台。 Boosting算法结合了多个低精度(或弱)模型来创建高精度(或强)模型。它可以用于各种领域, 例如信贷, 保险, 市场营销和销售。诸如AdaBoost, Gradient Boosting和XGBoost之类的Boosting算法被广泛用于机器学习算法中, 以赢得数据科学竞赛的冠军。在本教程中, 你将学习AdaBoost集成提升算法, 并且将涵盖以下主题:

  • 集成机器学习方法
    • 装袋
    • 助推
    • 堆放
  • AdaBoost分类器
  • AdaBoost算法如何工作?
  • 用Python建立模型
  • 利弊
  • 总结

集成机器学习方法

集成是一个组合模型, 它结合了一系列性能低下的分类器, 目的是创建一个改进的分类器。在此, 返回了执行多数表决的单个分类器表决和最终预测标签。集成提供比单个或基本分类器更高的准确性。集成方法可以通过将每个基础学习者分配给不同的机器来并行化。最后, 你可以说Ensemble学习方法是将几种机器学习方法组合到单个预测模型中以提高性能的元算法。集成方法可以使用装袋方法减少方差, 使用提升方法使用偏差, 或者使用堆叠方法来改善预测。

Python中的AdaBoost分类器1

套袋代表引导聚合。它以减少估计差异的方式组合了多个学习者。例如, 随机森林训练了M个决策树, 你可以在数据的不同随机子集上训练M个不同的树, 并对最终预测执行投票。套袋合奏的方法有随机森林和多余的树木。

Boosting算法是一组低精度分类器, 用于创建高精度分类器。低准确度分类器(或弱分类器)提供的准确性比掷硬币好。高度准确的分类器(或强分类器)提供的错误率接近0。Boosting算法可以跟踪未能通过准确预测的模型。提升算法受过度拟合问题的影响较小。以下三种算法在数据科学竞赛中获得了广泛的普及。

  • AdaBoost(自适应增强)
  • 梯度树增强
  • XGBoost

堆叠(或堆叠概括)是一种集成学习技术, 可将多个基本分类模型预测组合到一个新的数据集中。将此新数据视为另一个分类器的输入数据。该分类器用于解决此问题。堆叠通常称为混合。

Python中的AdaBoost分类器2

根据基础学习者的安排, 合奏方法可以分为两组:在并行合奏方法中, 例如, 并行生成基础学习器。随机森林。在顺序集成方法中, 基础学习器是顺序生成的, 例如AdaBoost。

根据基础学习器的类型, 合奏方法可以分为两组:均匀合奏方法在每次迭代中使用相同类型的基础学习器。异构集成方法在每次迭代中使用不同类型的基础学习器。

AdaBoost分类器

Ada-boost或Adaptive Boosting是Yoav Freund和Robert Schapire在1996年提出的集成提升分类器之一。它结合了多个分类器以提高分类器的准确性。 AdaBoost是一种迭代集成方法。 AdaBoost分类器通过组合多个性能不佳的分类器来构建一个强分类器, 这样你将获得高精度的强分类器。 Adaboost背后的基本概念是设置分类器的权重, 并在每次迭代中训练数据样本, 从而确保对异常观测值的准确预测。如果机器学习算法接受训练集上的权重, 则可以用作基础分类器。 Adaboost应该满足两个条件:

  1. 分类器应在各种加权的训练示例上进行交互训练。
  2. 在每次迭代中, 它都试图通过最小化训练误差为这些示例提供出色的拟合。

AdaBoost算法如何工作?

它按以下步骤工作:

  1. 最初, Adaboost随机选择一个训练子集。
  2. 通过基于上次训练的准确预测来选择训练集, 从而迭代训练AdaBoost机器学习模型。
  3. 它将较高的权重分配给错误的分​​类观测值, 以便在下一次迭代中, 这些观测值将获得较高的分类概率。
  4. 而且, 它根据分类器的准确性在每次迭代中将权重分配给经过训练的分类器。分类器越准确, 权重越高。
  5. 反复进行此过程, 直到完整的训练数据正确无误或达到指定的最大估计量为止。
  6. 要进行分类, 请对你构建的所有学习算法进行”投票”。
Python中的AdaBoost分类器3

用Python建立模型

导入所需的库

首先加载所需的库。

# Load libraries
from sklearn.ensemble import AdaBoostClassifier
from sklearn import datasets
# Import train_test_split function
from sklearn.model_selection import train_test_split
#Import scikit-learn metrics module for accuracy calculation
from sklearn import metrics

加载数据集

在模型构建部分中, 你可以使用IRIS数据集, 这是一个非常著名的多类分类问题。该数据集包含4个特征(花萼长度, 萼片宽度, 花瓣长度, 花瓣宽度)和一个目标(花朵的类型)。此数据具有三种类型的花类:osa蝶, 杂色和维珍妮卡。该数据集在scikit-learn库中可用, 或者你也可以从UCI机器学习库中下载它。

# Load data
iris = datasets.load_iris()
X = iris.data
y = iris.target

分割数据集

为了了解模型的性能, 将数据集分为训练集和测试集是一个很好的策略。

让我们使用函数train_test_split()拆分数据集。你需要传递3个参数功能, 目标和test_set大小。

# Split dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) # 70% training and 30% test

建立AdaBoost模型

让我们使用Scikit-learn创建AdaBoost模型。 AdaBoost使用决策树分类器作为默认分类器。

# Create adaboost classifer object
abc = AdaBoostClassifier(n_estimators=50, learning_rate=1)
# Train Adaboost Classifer
model = abc.fit(X_train, y_train)

#Predict the response for test dataset
y_pred = model.predict(X_test)

“最重要的参数是base_estimator, n_estimators和learning_rate。” (Adaboost分类器Chris Albon)

  • base_estimator:这是用于训练模型的较弱的学习者。它使用DecisionTreeClassifier作为默认的弱学习者进行培训。你还可以指定不同的机器学习算法。
  • n_estimators:要反复训练的弱学习者的数量。
  • learning_rate:它有助于弱学习者的体重。它使用1作为默认值。

评估模型

让我们估计一下分类器或模型可以多么准确地预测品种的类型。

可以通过比较实际测试设置值和预测值来计算准确性。

# Model Accuracy, how often is the classifier correct?
print("Accuracy:", metrics.accuracy_score(y_test, y_pred))
Accuracy: 0.8888888888888888

好吧, 你的准确性为88.88%, 被认为是很好的准确性。

为了进一步评估, 你还可以使用不同的基本估算器来创建模型。

使用不同的基础学习者

我已经使用SVC作为基本估计量。如果ML学习器接受样本权重(例如决策树, 支持向量分类器), 则可以将其用作基本估计器。

# Load libraries
from sklearn.ensemble import AdaBoostClassifier

# Import Support Vector Classifier
from sklearn.svm import SVC
#Import scikit-learn metrics module for accuracy calculation
from sklearn import metrics
svc=SVC(probability=True, kernel='linear')

# Create adaboost classifer object
abc =AdaBoostClassifier(n_estimators=50, base_estimator=svc, learning_rate=1)

# Train Adaboost Classifer
model = abc.fit(X_train, y_train)

#Predict the response for test dataset
y_pred = model.predict(X_test)


# Model Accuracy, how often is the classifier correct?
print("Accuracy:", metrics.accuracy_score(y_test, y_pred))
Accuracy: 0.9555555555555556

嗯, 你的分类率为95.55%, 被认为是不错的准确性。

在这种情况下, SVC基本估算器比决策树基本估算器具有更高的准确性。

优点

AdaBoost易于实现。它迭代地纠正弱分类器的错误, 并通过组合弱学习者来提高准确性。你可以在AdaBoost中使用许多基本分类器。 AdaBoost不容易过度拟合。可以从实验结果中找到答案, 但是没有具体的原因。

缺点

AdaBoost对噪声数据敏感。它受异常值的影响很大, 因为它试图完美地拟合每个点。与XGBoost相比, AdaBoost速度较慢。

总结

恭喜, 你已完成本教程的结尾!

在本教程中, 你学习了Ensemble机器学习方法, AdaBoost算法, 它的工作原理, 使用Python Scikit-learn包进行的模型构建和评估。另外, 讨论了它的优缺点。

我期待听到任何反馈或问题。你可以通过发表评论来提出问题, 我会尽力回答。

如果你想了解有关使用Python进行机器学习的更多信息, 请参加srcmini的XGBoost极限梯度提升课程。

赞(0)
未经允许不得转载:srcmini » Python中的AdaBoost分类器

评论 抢沙发

评论前必须登录!