本文概述
- 集成机器学习方法
- AdaBoost分类器
- AdaBoost算法如何工作?
- 用Python建立模型
- 优点
- 缺点
- 总结
- 集成机器学习方法
- 装袋
- 助推
- 堆放
- AdaBoost分类器
- AdaBoost算法如何工作?
- 用Python建立模型
- 利弊
- 总结
文章图片
套袋代表引导聚合。它以减少估计差异的方式组合了多个学习者。例如, 随机森林训练了M个决策树, 你可以在数据的不同随机子集上训练M个不同的树, 并对最终预测执行投票。套袋合奏的方法有随机森林和多余的树木。
Boosting算法是一组低精度分类器, 用于创建高精度分类器。低准确度分类器(或弱分类器)提供的准确性比掷硬币好。高度准确的分类器(或强分类器)提供的错误率接近0。Boosting算法可以跟踪未能通过准确预测的模型。提升算法受过度拟合问题的影响较小。以下三种算法在数据科学竞赛中获得了广泛的普及。
- AdaBoost(自适应增强)
- 梯度树增强
- XGBoost
文章图片
【Python中的AdaBoost分类器】根据基础学习者的安排, 合奏方法可以分为两组:在并行合奏方法中, 例如, 并行生成基础学习器。随机森林。在顺序集成方法中, 基础学习器是顺序生成的, 例如AdaBoost。
根据基础学习器的类型, 合奏方法可以分为两组:均匀合奏方法在每次迭代中使用相同类型的基础学习器。异构集成方法在每次迭代中使用不同类型的基础学习器。
AdaBoost分类器 Ada-boost或Adaptive Boosting是Yoav Freund和Robert Schapire在1996年提出的集成提升分类器之一。它结合了多个分类器以提高分类器的准确性。 AdaBoost是一种迭代集成方法。 AdaBoost分类器通过组合多个性能不佳的分类器来构建一个强分类器, 这样你将获得高精度的强分类器。 Adaboost背后的基本概念是设置分类器的权重, 并在每次迭代中训练数据样本, 从而确保对异常观测值的准确预测。如果机器学习算法接受训练集上的权重, 则可以用作基础分类器。 Adaboost应该满足两个条件:
- 分类器应在各种加权的训练示例上进行交互训练。
- 在每次迭代中, 它都试图通过最小化训练误差为这些示例提供出色的拟合。
- 最初, Adaboost随机选择一个训练子集。
- 通过基于上次训练的准确预测来选择训练集, 从而迭代训练AdaBoost机器学习模型。
- 它将较高的权重分配给错误的分??类观测值, 以便在下一次迭代中, 这些观测值将获得较高的分类概率。
- 而且, 它根据分类器的准确性在每次迭代中将权重分配给经过训练的分类器。分类器越准确, 权重越高。
- 反复进行此过程, 直到完整的训练数据正确无误或达到指定的最大估计量为止。
- 要进行分类, 请对你构建的所有学习算法进行” 投票” 。
文章图片
用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极限梯度提升课程。
推荐阅读
- 面向初学者(R中的机器学习)
- Atom IDE概述(安装和使用)
- BI和分析平台的比较
- Python机器学习入门开发权威简介
- 使用Auto-Keras进行自动化机器学习
- 在Python中使用Zip文件
- 使用Scikit-learn的朴素贝叶斯分类
- Python|清华教授用了36小时讲完的Python,整整632集,拿走提高工作效率
- Python|盲目自学python最大的谎言就是所谓的“好学”(含视频及书籍资源)