4.[笔记]统计学习方法—提升办法AdaBoost算法

文章目录

  • 1.adaboost算法
    • 1.1 提升方法的基本思路
    • 1.2 AdaBoost算法
    • 1.3 很硬核的证明adaboost是前向分步算法。
  • 2. 提升树
    • 2.2 梯度提升
  • 3.几个数学计算
  • 4.sklearn里面的adaboost函数

1.adaboost算法

1.1 提升方法的基本思路

主要解决两个问题:

  • 如何每一轮都改变训练数据的权值或概率分布;
  • 如何将弱分类器组合成强分类器。

adaboost的做法是提高上一轮错误分类数据的权值,降低分类正确的样本的权值,起到“分而治之”的作用;对于第二个问题,adaboost采用加权多数表决的方法,加大分类误差小的弱分类器的权值,减小分类误差大的弱分类器的权值。

1.2 AdaBoost算法

  1. 给每个训练样本( x 1 , x 2 , … . , x N x_{1},x_{2},….,x_{N} x1,x2,.,xN)分配权重,初始权重 w 1 w_{1} w1均为1/N。

  2. 针对带有权值的样本进行训练,得到模型 G m G_m Gm(初始模型为G1)。

  3. 计算模型 G m G_m Gm的分类误差率 e m = ∑ i = 1 N w i I ( y i ̸ = G m ( x i ) ) e_m=\sum_{i=1}^Nw_iI(y_i\not= G_m(x_i)) em=i=1NwiI(yi̸=Gm(xi)),注: I ( x ) I(x) I(x) 是指示函数。

  4. 计算模型 G m G_m Gm的系数 α m = 0.5 log ⁡ 1 − e m e m \alpha_m=0.5\log \frac{1-e_m}{e_m} αm=0.5logem1em

  5. 根据误分率e和当前权重向量 w m w_m wm更新权重向量 w m + 1 w_{m+1} wm+1

  6. 计算组合模型 f ( x ) = ∑ m = 1 M α m G m ( x i ) f(x)=\sum_{m=1}^M\alpha_mG_m(x_i) f(x)=m=1MαmGm(xi)的误分率。

  7. 当组合模型的误分率或迭代次数低于一定阈值,停止迭代;否则,回到步骤2。

1.3 很硬核的证明adaboost是前向分步算法。

学习的是加法模型,损失函数是指数损失函数。证明从略,我就当定理了。

2. 提升树

基函数是决策树的时候,当损失函数是均方误差或者根均方误差的时候,每一步优化很简单。

2.2 梯度提升

区别于平方损失函数和指数损失函数,对于一般的损失函数而言,使用grandient boosting算法,利用最速下降的近似方法,关键在于利用损失函数的负梯度在当前模型的值:
− [ ∂ L ( y , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) - [ \frac{\partial L (y,f(x_i))} {\partial f(x_i)}]_{f(x)=f_{m-1}(x)} [f(xi)L(y,f(xi))]f(x)=fm1(x)

3.几个数学计算

# 计算alpha
    def _alpha(self, error):
        return 0.5 * np.log((1-error)/error)
    
    # 规范化因子
    def _Z(self, weights, a, clf):
        return sum([weights[i]*np.exp(-1*a*self.Y[i]*clf[i]) for i in range(self.M)])
        
    # 权值更新
    def _w(self, a, clf, Z):
    """
	M是数据的行数,M,N=data.shape
	"""
        for i in range(self.M):
            self.weights[i] = self.weights[i]*np.exp(-1*a*self.Y[i]*clf[i])/ Z

4.sklearn里面的adaboost函数



这里我直接借用官网的例子了,如下图:
4.[笔记]统计学习方法—提升办法AdaBoost算法_第1张图片
官网连接直通车:
sklearn AdaBoostClassifier 0.21.2
sklearn AdaBoostRegressor 0.21.2


以上。

你可能感兴趣的:(统计学习方法)