机器学习算法[7]--集成方法之AdaBoost原理详解及sklearn实现

1. AdaBoost

1.1 原理

AdaBoost通过串行的方式迭代训练多个相互依赖的简单模型,最后综合多个简单模型共同作用产生输出,其中核心训练思想:

(1)提高分类错误或回归偏差大的样本权重,增大对困难样本的关注;降低分类正确或回归偏差小的样本权重,减少对容易样本的关注

(2)提高分类错误率低或回归偏差小模型权重增大其对最终输出结果的影响;降低分类错误率高或回归偏差大模型权重减少其对最终输出结果的影响

1.1.1 AdaBoost分类

AdaBoost分类更新样本权重和组合分类模型的过程如下:

(1)假设给定一个大小为 n n n的数据集:
D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . . , ( x n , y n ) } \boldsymbol{D} = \{ (\pmb{x_1},y_1), (\pmb{x_2}, y_2),.....,(\pmb{x_n}, y_n) \} D={ (x1x1x1,y1),(x2x2x2,y2),.....,(xnxnxn,yn)}
其中数据集的初始权重分布为:
W 1 ( i ) = ( w 1 ( 1 ) , w 1 ( 2 ) , . . . , w 1 ( n ) ) = ( 1 N , 1 N , . . . , 1 N ) \boldsymbol{W_1^{(i)}} = (w_1^{(1)}, w_1^{(2)},...,w_1^{(n)})=(\frac{1}{N},\frac{1}{N},...,\frac{1}{N}) W1(i)=(w1(1),w1(2),...,w1(n))=(N1,N1,...,N1)

(2)第t次训练的简单模型分类误差率定义为错误分类样本的权重和:
e t = ∑ i = 1 n w t ( i ) I ( f t ( x i ) ≠ y i ) , t = 1 , 2 , . . . , m e_t = \sum_{i=1}^{n}w_t^{(i)}I(f_t(\pmb{x_i}) \neq y_i),\quad t=1,2,...,m et=i=1nwt(i)I(ft(xixixi)=yi),t=1,2,...,m

其中 f t ( x i ) f_t(\pmb{x_i}) ft(xixixi)为第t次训练的简单模型决策函数, m m m为简单模型训练迭代次数

(3)根据第t次训练简单模型的误差率计算该模型在最终输出的权重占比:
α t = 1 2 log ⁡ ( 1 − e t e t ) \alpha_t = \frac{1}{2} \log (\frac{1-e_t}{e_t}) αt=21log(et1et)

(4)更新第t+1次训练样本的权重分布:
W t + 1 ( i ) = W t ( i ) e x p ( − α t y i f t ( x i ) ) Z t \boldsymbol{W_{t+1}^{(i)}} = \frac{\boldsymbol{W_{t}^{(i)}}exp(-\alpha_ty_if_t(\pmb{x_i}))}{Z_t} Wt+1(i)=ZtWt(i)exp(αtyift(xixixi))
其中 Z t Z_t Zt为规一化因子,定义如下:
Z t = ∑ i = 1 n w t ( i ) e x p ( − α t y i f t ( x i ) ) = 2 e t ( 1 − e t ) Z_t= \sum_{i=1}^n w_{t}^{(i)}exp(-\alpha_ty_if_t(\pmb{x_i}))=2\sqrt{e_t(1-e_t)} Zt=i=1nwt(i)exp(αtyift(xixixi))=2et(1et)

(5)当达到指定误差率或简单模型训练的最大迭代次数,则组合得到最终的AdaBoost模型:
f ( x ) = ∑ t = 1 m α t f t ( x ) f(\pmb{x}) =\sum_{t=1}^{m}\alpha_tf_t(\pmb {x}) f(xxx)=t=1mαtft(xxx)

1.1.2 AdaBoost回归

AdaBoost回归更新样本权重和组合回归模型的过程如下:

(1)假设给定一个大小为 n n n的数据集:
D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . . , ( x n , y n ) } \boldsymbol{D} = \{ (\pmb{x_1},y_1), (\pmb{x_2}, y_2),.....,(\pmb{x_n}, y_n) \} D={ (x1x1x1,y1),(x2x2x2,y2),.....,(xnxnxn,yn)}
其中数据集的初始权重分布为:
W 1 ( i ) = ( w 1 ( 1 ) , w 1 ( 2 ) , . . . , w 1 ( n ) ) = ( 1 N , 1 N , . . . , 1 N ) \boldsymbol{W_1^{(i)}} = (w_1^{(1)}, w_1^{(2)},...,w_1^{(n)})=(\frac{1}{N},\frac{1}{N},...,\frac{1}{N}) W1(i)=(w1(1),w1(2),...,w1(n))=(N1,N1,...,N1)

(2)第t次训练的简单模型中样本相对误差的定义如下:
线 性 误 差 : e t ( i ) = ∣ y i − f ( x i ) ∣ E t 线性误差:e_t^{(i)} = \frac{|y_i - f(\pmb{x_i})|}{E_t} 线et(i)=Etyif(xixixi)
平 方 误 差 : e t ( i ) = ( y i − f ( x i ) ) 2 E t 平方误差:e_t^{(i)} = \frac{(y_i - f(\pmb{x_i}))^2}{E_t} et(i)=Et(yif(xixixi))2
  指 数 误 差 : e t ( i ) = 1 − e x p ( − ∣ y i − f ( x i ) ∣ E t ) \quad \quad \quad \text{ }指数误差:e_t^{(i)} = 1-exp(\frac{-|y_i - f(\pmb{x_i})|}{E_t})  et(i)=1exp(Etyif(xixixi))

其中 f t ( x i ) f_t(\pmb{x_i}) ft(xixixi)为第t次训练的简单模型决策函数, E t E_t Et为所有样本中对应的最大误差

(3)第t次训练的简单模型回归误差率定义如下:
e t = ∑ i = 1 n w t ( i ) e t ( i ) , t = 1 , 2 , . . . , m e_t = \sum_{i=1}^{n}w_t^{(i)}e_t^{(i)},\quad t=1,2,...,m et=i=1nwt(i)et(i),t=1,2,...,m

其中 m m m为简单模型训练迭代次数

(4)根据第t次训练简单模型的误差率计算该模型在最终输出的权重占比:
α t = e t 1 − e t \alpha_t =\frac{e_t}{1-e_t} αt=1etet

(5)更新第t+1次训练样本的权重分布:
W t + 1 ( i ) = W t ( i ) α t 1 − e t i Z t \boldsymbol{W_{t+1}^{(i)}} = \frac{\boldsymbol{W_{t}^{(i)}}\alpha_t^{1-e_t^{i}}}{Z_t} Wt+1(i)=ZtWt(i)αt1eti
其中 Z t Z_t Zt为规一化因子,定义如下:
Z t = ∑ i = 1 n w t ( i ) α t 1 − e t i Z_t= \sum_{i=1}^nw_{t}^{(i)}\alpha_t^{1-e_t^{i}} Zt=i=1nwt(i)αt1eti

(6)当达到指定误差率或简单模型训练的最大迭代次数,则组合得到最终的AdaBoost模型:
f ( x ) = ∑ t = 1 m ln ⁡ ( 1 α t ) g ( x ) f(\pmb{x}) =\sum_{t=1}^{m}\ln(\frac{1}{\alpha_t})g(\pmb {x}) f(xxx)=t=1mln(αt1)g(xxx)
其中 g ( x ) g(\pmb x) g(xxx) α t f t ( x ) , t = 1 , 2 , 3 , . . . , m \alpha_tf_t(\pmb {x}),t=1,2,3,...,m αtft(xxx),t=1,2,3,...,m的中位数分类器 f t ( x ) f_t(\pmb x) ft(xxx)

1.2 sklearn实现

参考官方文档:点击查看

AdaBoost分类可通过sklearn库中ensemblel下的AdaBoostClassifier类实现
在这里插入图片描述
有关参数

  • base_estimator:简单模型的类型,默认为决策树分类模型
  • n_estimators:AdaBoost迭代训练中简单模型的数量
  • learning_rate:每次迭代过程中各简单模型的附加权重(正则化方法)
  • algorithm:选择迭代训练的算法
  • random_state:控制简单模型中存在的随机性

有关属性
在这里插入图片描述

  • base_estimateor_:AdaBoost分类中最原始的简单模型
  • estimators_:各迭代训练过程中简单模型列表集合
  • classes_:各类别标签
  • n_classes_:类别数量
  • estimator_weights_:各简单模型的权重
  • estimator_errors_:各简单模型的分类误差率
  • feature_importances_:基于特征计算准则的各特征重要程度
  • n_features_in_:特征的个数
  • feature_names_in_:特征的名称,仅当输入特征有(字符)名称时可用

有关方法
在这里插入图片描述

  • decision_function:计算输入数据在最终AdaBoost模型的预测值
  • fit:拟合AdaBoost模型
  • get_params:获取对应模型参数
  • predict:预测类别
  • predict_log_proba:预测l类别概率的对数
  • predict_proba:预测类别概率
  • score:获取给定数据集的平均准确度
  • set_params:设置对应模型参数
  • staged_decision_function:返回每一步迭代过程中简单模型函数值的生成器
  • staged_predict:返回每一步迭代过程中简单模型预测类别的生成器
  • staged_predict_proba:返回每一步迭代过程中简单模型预测类别概率的生成器
  • staged_score:返回每一步迭代过程中简单模型平均准确度的生成器

使用案例

>>> import numpy as np
>>> from sklearn.ensemble import AdaBoostClassifier

>>> clf = AdaBoostClassifier() #实例化AdaBoost分类模型对象
>>> X = np.array([[1, 1], [1, 0], [0, 1]]) #数据
>>> y = np.array(['yes', 'no', 'no']) #类别
>>> clf.fit(X, y) #拟合求解
>>> clf.classes_
['no', 'yes']
>>> clf.n_features_in_
2
>>> clf.estimator_weights_
[1., 1.,...,1.]
>>> clf.decision_function(X)
[11.85...,-11.85...,-12.33...]
>>> clf.predict([[1, 0]])
['no']
>>> clf.score(X, y)
1.0

有关AdaBoost回归,点击查看官方文档

猜你喜欢

转载自blog.csdn.net/qq_56749449/article/details/125566337