Python机器学习之AdaBoost算法
简介
AdaBoost(Adaptive Boosting)是一个非常流行的机器学习算法,它能够提高弱分类算法的准确性。其中,“自适应”指的是每个分类器的权重会随着准确率的变化而动态调整,而“增量”则表示每个分类器都是基于之前分类器的结果进行训练的。
原理
AdaBoost的基本算法如下:
- 初始化数据集权重 $w_i = 1/N$。
- 对于 $m$ 轮训练:
- 使用加权数据集训练一个基本分类器 $h_m$。
- 计算基本分类器的错误率 $e_m$。
- 计算基本分类器的权重 $\alpha_m = \frac{1}{2} \ln{\frac{1-e_m}{e_m}}$。
- 更新数据集权重 $w_i \leftarrow w_i \, \exp{(-\alpha_m y_i h_m(x_i))}$。
- 对数据集权重进行归一化 $w_i \leftarrow \frac{w_i}{\sum_{i=1}^N w_i}$。
- 对于一个新的数据点 $x$,使用所有基本分类器的结果加权求和:$\hat y(x) = \mathrm{sign} \left( \sum_{i=1}^{m} \alpha_m h_m(x) \right)$。
其中,$N$ 是数据集的大小,$y_i$ 是第 $i$ 个数据点的真实标签,$h_m(x_i)$ 表示第 $m$ 个基本分类器对数据点 $x_i$ 的分类结果,$\hat y(x)$ 是最终的分类结果。
通过逐步迭代,AdaBoost能够不断地提高分类器的准确性,同时根据分类器的性能动态调整每个分类器的权重,最终得到一个强分类器。
示例
下面我们将用两个例子来说明AdaBoost的应用过程。
案例1:Adaboost分类Iris数据集
我们首先需要导入必要的库和数据集。
import numpy as np
from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
接下来,我们创建一个AdaBoost分类器对象,并进行训练。
# 创建AdaBoost分类器
ada_clf = AdaBoostClassifier(n_estimators=100, random_state=42)
# 训练模型
ada_clf.fit(X_train, y_train)
最后,我们对模型进行预测,并计算预测准确率。
# 预测测试集
y_pred = ada_clf.predict(X_test)
# 计算准确率
acc = np.mean(y_pred == y_test)
print(f'Test accuracy: {acc:.2%}')
在这个例子中,我们使用了一个包含100个基本分类器的AdaBoost分类器。通过对测试集进行预测,我们得到了一个准确率为97.22%的模型。
案例2:Adaboost分类手写数字数据集
我们还可以使用AdaBoost算法对更复杂的数据集进行分类,如手写数字数据集。
import numpy as np
from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
digits = load_digits()
X, y = digits.data, digits.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
创建AdaBoost分类器,并进行训练。
# 创建AdaBoost分类器
ada_clf = AdaBoostClassifier(n_estimators=100, random_state=42)
# 训练模型
ada_clf.fit(X_train, y_train)
最后,我们对模型进行预测,并计算预测准确率。
# 预测测试集
y_pred = ada_clf.predict(X_test)
# 计算准确率
acc = accuracy_score(y_test, y_pred)
print(f'Test accuracy: {acc:.2%}')
在这个例子中,我们使用了一个包含100个基本分类器的AdaBoost分类器。通过对测试集进行预测,我们得到了一个准确率为95.56%的模型。
总结
本文介绍了AdaBoost算法的原理及在Python中的实现,同时提供了两个示例,展示了AdaBoost算法的应用过程和效果。AdaBoost算法是一个强大的机器学习算法,值得在实际应用中深入研究和掌握。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python机器学习之AdaBoost算法 - Python技术站