目录
4 Adaboost算法(Adaptive Boosting)
5 梯度提升树 (Gradient Boosting Decision Tree)
5.3.1 GradientBoostingClassifier
5.3.2 GradientBoostingRegressor
6 XGboost(Extreme Gradient Boosting)极端梯度提升树
6.4.3 通用参数(General Parameters)
6.4.5 目标参数(Objective Parameters)
6.4.6 评估参数(Evaluation Parameters)
4 Adaboost算法(Adaptive Boosting)
4.1 核心思想
AdaBoost算法(Adaptive Boosting)是一种迭代算法,其核心思想是将多个弱分类器组合成一个强分类器。在机器学习中,弱分类器通常指的是分类能力稍强于随机猜测的分类器,而强分类器则是指分类能力很强的分类器。AdaBoost算法通过调整样本权重和弱分类器权重,使得每次迭代中,被错分的样本权重增加,而被正确分类的样本权重减小,从而确保弱分类器能够更多地关注那些难以分类的样本。
4.2 算法流程
- 初始化训练数据的权重分布:
- 对于每一个训练样本,初始时都被赋予相同的权重。如果有N个样本,则每一个训练样本的初始权值为1/N。这步操作可以表示为初始化一个权重向量D1=(w11, w12, ..., w1N),其中w1i=1/N,i=1,2,...,N。
- 迭代训练弱分类器:
- 对于m=1,2,...,M(M为指定的最大迭代次数,即弱分类器的个数):
- 使用具有权值分布Dm的训练数据集进行学习,得到弱分类器Gm(x)。这通常是一个简单的分类器,如决策树桩(决策树深度为1的决策树)。
- 计算Gm(x)在训练数据集上的分类误差率em。这通常通过计算Gm(x)错误分类的样本的权值之和,然后除以所有样本的权值之和来得到。
- 计算Gm(x)的系数αm。αm通常与em成反比,即em越小,αm越大,表示该弱分类器在最终强分类器中的重要性越大。
- 模型权重计算公式:
- 样本权重计算公式:
-
- 对于m=1,2,...,M(M为指定的最大迭代次数,即弱分类器的个数):
- 更新训练数据集的权值分布:
- 对于每一个样本,根据其是否被Gm(x)正确分类,调整其权重。如果Gm(x)将样本正确分类,则降低其权重;如果Gm(x)将样本错误分类,则增加其权重。这样可以使得在下一轮迭代中,被Gm(x)错误分类的样本能够得到更多的关注。
- 构建强分类器:
- 在经过M轮迭代后,我们得到了M个弱分类器g1(x), g2(x), ..., gM(x)以及它们对应的系数α1, α2, ..., αM。将这些弱分类器按照其系数进行线性组合,即得到最终的强分类器H(x)。
- 预测:
- 使用得到的强分类器H(x)对新的数据进行预测。
4.3 算法特点
- 高性能:AdaBoost算法能够自动选择并整合多个弱分类器,从而提高整体分类性能。它通过关注错误分类样本,并加大它们的权重,使得后续的弱分类器能够更加关注这些困难样本,从而提高整体性能。
- 简单易用:AdaBoost算法不需要对弱分类器进行特别的要求,只需要它们能够稍微好于随机猜测即可。这使得AdaBoost算法非常灵活和容易实现。
- 鲁棒性:AdaBoost算法对噪声和异常值具有一定的鲁棒性。通过不断调整样本权重,AdaBoost能够在一定程度上减小噪声和异常值对整个模型的影响。
4.4 API
4.4.1 api
sklearn.ensemble.AdaBoostClassifier()
4.4.2 参数介绍
base_estimator
:指定基分类器,默认为DecisionTreeClassifier(max_depth=1)
,即深度为 1 的决策树(决策树桩)。n_estimators
:弱分类器的数量,默认为 50。learning_rate
:学习率,用于控制每个弱分类器权重的更新速度,默认为 1.0。algorithm
:指定用于提升的算法,可以是 "SAMME" 或 "SAMME.R",默认为 "SAMME.R"。random_state
:控制随机性的种子,用于基分类器的训练和数据集的划分。
4.4.3 代码实现
from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 生成一个模拟的二分类数据集
X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_redundant=10, random_state=42)
# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 初始化 AdaBoostClassifier,使用默认参数
abc = AdaBoostClassifier(random_state=42)
# 使用训练数据拟合模型
abc.fit(X_train, y_train)
# 使用测试集进行预测
y_pred = abc.predict(X_test)
# 计算并打印准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: {:.2f}%".format(accuracy * 100))
# 你还可以查看模型的更多属性,如弱分类器的数量、每个弱分类器的权重等
print("Number of estimators:", abc.n_estimators_)
print("Estimator weights:", abc.estimator_weights_)
print("Estimator errors:", abc.estimator_errors_)
5 梯度提升树 (Gradient Boosting Decision Tree)
梯度提升树(Gradient Boosting Decision Tree,简称GBDT)是一种集成学习算法,它通过构建多个决策树并将它们的结果进行组合来改进预测性能。梯度提升树被认为是统计学习中性能最好的方法之一,它结合了梯度提升(Gradient Boosting)和决策树(Decision Tree)两种技术。
5.1 原理
1. 初始化:
- GBDT通过迭代地训练弱学习器(如决策树)并将它们组合起来,以最小化损失函数。
- 在每一步迭代中,GBDT会计算当前模型在训练数据上的梯度,并根据这个梯度来更新弱学习器。
- 具体来说,GBDT会找到一个最佳的弱学习器,使得在当前模型预测错误的地方进行修正,从而最小化损失函数。
2. 公式推导:
- 假设我们有一个损失函数
,其中
y
是真实标签,F(x)
是模型预测值。 - 初始模型
通常是一个常数。
- 在第
m
步迭代,我们的目标是找到一个函数(即弱学习器)和一个系数
,使得
的损失函数最小化。
- 我们可以使用梯度下降的思想来找到
β_m
和T_m(x)
。首先,计算损失函数关于F(x)
的梯度,记为