网站变成灰色,wordpress post date,怎么下载网站模板,自动做设计的网站Boosting是一种集成学习方法#xff0c;AdaBoost是Boosting算法中的一种具体实现。
Boosting方法的核心思想在于将多个弱分类器组合成一个强分类器。这些弱分类器通常是简单的模型#xff0c;比如决策树#xff0c;它们在训练过程中的错误会被后续的弱分类器所修正。Boosti…Boosting是一种集成学习方法AdaBoost是Boosting算法中的一种具体实现。
Boosting方法的核心思想在于将多个弱分类器组合成一个强分类器。这些弱分类器通常是简单的模型比如决策树它们在训练过程中的错误会被后续的弱分类器所修正。Boosting算法通过逐步增加新的弱分类器来提高整体模型的性能每个新的弱分类器都专注于之前模型分类错误的样本。
AdaBoostAdaptive Boosting是Boosting算法家族中的一员它的特点是使用了指数损失函数exponential loss function这种损失函数会给分类错误的样本赋予更大的权重使得后续的弱分类器更加关注这些难以分类的样本。通过这种方式AdaBoost能够自适应地调整每个样本的权重从而提高模型的整体性能。除了AdaBoost还有其他基于不同损失函数的Boosting算法如L2Boosting和LogitBoost等。这些算法虽然在具体的实现细节上有所不同但都遵循了Boosting方法将弱分类器组合成强分类器的基本框架。
Boosting每一个训练器重点关注前一个训练器不足的地方进行训练通过加权投票的方式得出预测结果。 Bagging 和 Boosting
Bagging 通过均匀取样的方式从原始样本集中抽取训练集而 Boosting 使用全部样本并在每一轮训练中根据错误率调整样例权重。这意味着 Bagging 的训练过程可以并行进行因为它的基模型之间是独立的而 Boosting 通常是串行进行的因为每个模型都依赖于前一个模型的表现。
Bagging 方法中每个基模型对于最终决策的贡献是相等的类似于民主投票制每个模型有一票而在 Boosting 中每个基模型的贡献是根据其性能加权的性能更好的模型会有更大的影响力。
AdaBoost
AdaBoost算法的核心步骤是 权重更新在每一轮迭代中根据样本的分类结果来更新每个样本的权重。如果一个样本被正确分类那么它的权重将会降低如果一个样本被错误分类那么它的权重将会增加。这样可以使得在后续的迭代中分类器更加关注那些难以分类的样本。 弱分类器的选择在每一轮迭代中从所有的弱分类器中选择一个最佳的弱分类器。这个最佳的弱分类器是指在当前权重分布下分类误差最小的那个弱分类器。 分类误差率较小的弱分类器的权值大在表决中起较大作用。
AdaBoost 模型公式 α 为模型的权重m 为弱学习器数量。hi(x) 表示弱学习器H(x) 输出结果大于 0 则归为正类小于 0 则归为负类。
AdaBoost 构建过程
SampleFeature (x)Label (y)11-122-1331441
初始化 D1(1)D1(2)D1(3)D1(4)1/4
第1轮迭代
训练一个弱分类器 ℎ1(x)例如 h_1(x) \sign(x - 1.5)。计算错误率 ϵ1假设所有样本都被正确分类则 ϵ10。计算权重α1由于epsilon10则α1infty。但通常我们会设置一个上限比如α10.5。更新样本权重由于所有样本都被正确分类权重保持不变。
第2轮迭代
训练另一个弱分类器 ℎ2(x)例如 h_2(x) \sign(x - 3)。计算错误率 ϵ2假设样本1和2被正确分类样本3和4被错误分类则ϵ221。计算权重α2α221ln(212)21ln(4)≈0.693。更新样本权重增加样本3和4的权重减少样本1和2的权重。
最终分类器
组合弱分类器的预测结果形成最终的强分类器H(x)。
这个过程会根据迭代次数M 重复进行直到达到预定的迭代次数或者满足某个停止条件如错误率达到某个阈值。
Demo实战
import pandas as pd
df_wine pd.read_csv(wine.data)df_wine.columns [Class label, Alcohol, Malic acid, Ash, Alcalinity of ash, Magnesium, Total phenols,
Flavanoids, Nonflavanoid phenols, Proanthocyanins, Color intensity, Hue, OD280/OD315 of diluted wines,
Proline]df_wine df_wine[df_wine[Class label] ! 1]X df_wine[[Alcohol, Hue]]
y df_wine[Class label] 划分训练集测试集
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_splitle LabelEncoder()
y le.fit_transform(y)
# 划分训练集测试集
X_train,X_test,y_train,y_test train_test_split(X,y,test_size0.4,random_state1)
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifiertree DecisionTreeClassifier(criterionentropy,max_depth1)
ada AdaBoostClassifier(base_estimatortree,n_estimators500,learning_rate0.1)from sklearn.metrics import accuracy_scoretree tree.fit(X_train,y_train)
y_train_pre tree.predict(X_train)
y_test_pre tree.predict(X_test)
tree_train accuracy_score(y_train,y_train_pre)
tree_test accuracy_score(y_test,y_test_pre)
print(Decision tree train/test accuracies %.3f/%.3f % (tree_train,tree_test))
# 0.845/0.854ada ada.fit(X_train,y_train)
y_train_pre ada.predict(X_train)
y_test_pre ada.predict(X_test)
ada_train accuracy_score(y_train,y_train_pre)
ada_test accuracy_score(y_test,y_test_pre)
print(Adaboost train/test accuracies %.3f/%.3f % (ada_train,ada_test))
# 1/0.875 AdaBosst的决策区域比单层的决策区域更加复杂。
集成学习与单独的分类器性能比较集成学习提高了复杂度但在实践中需要衡量是否愿意为适度提高预测性能付出更多的计算成本。
AdaBoost算法的总结
AdaBoost的核心思想是通过对错误分类的样本增加权重使得后续的弱分类器更加关注这些难以分类的样本。通过加权投票的方式将多个弱分类器的预测结果组合起来形成一个强分类器。
初始化为每个训练样本分配相同的权重。迭代训练弱分类器对于每一轮迭代训练一个弱分类器使其在加权训练集上的错误率最小化。计算弱分类器权重根据弱分类器在加权训练集上的错误率计算其权重。错误率越低权重越高。更新样本权重根据弱分类器的表现更新样本权重。被错误分类的样本权重增加正确分类的样本权重减少。构建最终分类器将所有弱分类器的预测结果按照其权重进行加权求和形成最终的强分类器。 应用领域
AdaBoost算法广泛应用于各种机器学习任务包括图像识别、文本分类、医学诊断等领域。
优点
提高模型的性能AdaBoost可以显著提高弱分类器的性能使其成为一个强大的分类器。鲁棒性AdaBoost对于过拟合具有很好的鲁棒性。灵活性可以与各种类型的弱分类器结合使用。
缺点
对噪声敏感如果训练数据包含噪声AdaBoost可能会给噪声样本分配较高的权重从而影响模型的性能。长时间训练对于大规模数据集AdaBoost的训练时间可能会很长。