
在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。
AdaBoost 模型是弱分类器的线性组合:
算法步骤:
1)给每个训练样本(
)分配权重,初始权重
均为
。
2)针对带有权值的样本进行训练,得到基本分类器
(初始模型为
)。
3)计算模型
的误分率
4)计算模型
的系数
5)根据误分率
和当前权重向量
更新权重向量
是规范化因子,
6)计算组合模型
的误分率。
7)当组合模型的误分率或迭代次数低于一定阈值,停止迭代;否则,回到步骤 2)
书上有定理证明,AdaBoost 算法能在学习的过程中,不断减少训练误差。
AdaBoost 具有适应性,即它能适应弱分类器各自的训练误差率。这也是它的名称(适应的提升)的由来,Ada是Adaptive的简写。
AdaBoost 算法的一个解释是该算法实际是前向分步算法的一个实现。
在这个方法里,模型是加法模型,损失函数是指数损失,算法是前向分步算法。
每一步中极小化损失函数
得到参数
。
提升树是以分类树或回归树为基本分类器的提升方法。提升树被认为是统计学习中最有效的方法之一。
提升方法实际采用加法模型(即基函数的线性组合)与前向分步算法。
以决策树为基函数的提升方法称为提升树(boosting tree)。
sklearn.ensemble.AdaBoostClassifier
class sklearn.ensemble.AdaBoostClassifier(base_estimator=None,
n_estimators=50, learning_rate=1.0, algorithm='SAMME.R',
random_state=None)参考:https://github.com/fengdu78/lihang-code
# -*- coding:utf-8 -*-
# @Python Version: 3.7
# @Time: 2020/3/24 23:13
# @Author: Michael Ming
# @Website: https://michael.blog.csdn.net/
# @File: AdaBoost.py
# @Reference: https://github.com/fengdu78/lihang-code
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import load_iris
data = [[0, 1, 3, -1],
[0, 3, 1, -1],
[1, 2, 2, -1],
[1, 1, 3, -1],
[1, 2, 3, -1],
[0, 1, 2, -1],
[1, 1, 2, 1],
[1, 1, 1, 1],
[1, 3, 1, -1],
[0, 2, 1, -1]]
data = pd.DataFrame(np.array(data))
X, y = data.iloc[:, 0:-1], data.iloc[:, -1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
clf = AdaBoostClassifier(n_estimators=50, learning_rate=0.5)
clf.fit(X_train, y_train)
print(clf.score(X_test, y_test))