当前位置: 代码迷 >> 综合 >> AdaBoost 算法:回归问题
  详细解决方案

AdaBoost 算法:回归问题

热度:19   发布时间:2023-12-08 17:15:00.0

前言

在《统计学习方法》这本书中介绍了基于分类问题的AdaBoost方法,其中更新样本权重采用的是 y i ! = G ( x i ) y_i != G(x_i) yi?!=G(xi?),其实当时就思考这样一个问题:如果用于回归任务,那么这个更新样本权重该如何计算?本文基于此问题展开讨论。对此问题有疑问的请参考博客提升方法(boosting)和AdaBoost详解

AdaBoost 回归算法

我们都知道回归预测得到的结果是数值,比如 房子价格,每一个房产样本都有一个房产价格,这个价格是一个数值,不同的房产价格可能是不一样的,且价格繁多,不像分类问题,类别较固定,所以使用AdaBoost算法做回归问题时不能单单的用分类问题的AdaBoost 算法,其重点在于如何更新样本权重及分类器权重,参考资料有如下一种思路:

  • 首先聊聊误差率问题,对于第m个若学习器,计算它在训练集上的最大误差:
    E m = m a x ∣ y i ? G m ( x i ) ∣ E_m=max|y_i - G_m(x_i)| Em?=maxyi??Gm?(xi?)
    为什么不取全体样本误差总值?
  • 计算每个样本的相对误差:
    e m i = ∣ y i ? G m ( x I ) ∣ E m e_{mi}=\frac{|y_i - G_m(x_I)|}{E_m} emi?=Em?yi??Gm?(xI?)?
    也可以用平方误差:
    e m i = ∣ y i ? G m ( x I ) ∣ 2 E m 2 e_{mi}=\frac{|y_i - G_m(x_I)|^2}{E_m^2} emi?=Em2?yi??Gm?(xI?)2?
  • 得到最终得到第m个弱分类器的误差率:
    e m = ∑ i = 1 N w m i e m i e_m = \sum_{i=1}^{N}w_{mi}e_{mi} em?=i=1N?wmi?emi?
  • 由此得到弱学习器权重系数:
    a m = e m 1 ? e m a_m = \frac{e_m}{1-e_m} am?=1?em?em??

这里有一个问题, e m e_{m} em?一定小于1嘛。

  • 样本权重更新公式为:
    w m + 1 , i = w m i Z m a m 1 ? e m i w_{m+1,i}=\frac{w_{mi}}{Z_m}a_{m}^{1-e_{mi}} wm+1,i?=Zm?wmi??am1?emi??
    其中 Z m Z_m Zm?是一个规范化因子:
    Z m = ∑ i = 1 N w m i a m 1 ? e m i Z_m=\sum_{i=1}^{N}w_{mi}a_{m}^{1-e_{mi}} Zm?=i=1N?wmi?am1?emi??
    这有点像样本误差除以所有误差,计算当个样本误差占比,这个用来作为样本权重。
  • 最后是结合策略,和分类问题稍有不同,采用的是对加权的弱学习器取中位数的方法,最终的强回归器为:
    f ( x ) = ∑ m = 1 M ( l n ( 1 a m ) ) g ( x ) = [ ∑ m = 1 M ( l n ( 1 a m ) ) ] g ( x ) \begin{aligned} f(x)&=\sum_{m=1}^{M}(ln(\frac{1}{a_m}))g(x) \\ &= \bigg[\sum_{m=1}^{M}(ln(\frac{1}{a_m}))\bigg]g(x) \end{aligned} f(x)?=m=1M?(ln(am?1?))g(x)=[m=1M?(ln(am?1?))]g(x)?
    其中, g ( x ) g(x) g(x)是所有 a m G m ( x ) , m = 1 , 2 , . . . , M a_mG_m(x),m=1,2,...,M am?Gm?(x)m=1,2,...,M的中位数,这样分析,那么在上述公式中对于 m m m的不同取值 g ( x ) g(x) g(x)都是相同的分类器,只不多是前面的权重不同而已。感觉取中位数的依据是什么呢?取中位数的时候分类器是不是先排序?难道是按照训练分类器的先后顺序?其他分类器的权重相加也有点看不懂依据?继续参考其他博客
  • 当然有些博客采用分类问题的加权平均法:
    f ( x ) = ∑ m = 1 M ( l n 1 a m ) G m ( x ) f(x)=\sum_{m=1}^{M}(ln\frac{1}{a_m})G_m(x) f(x)=m=1M?(lnam?1?)Gm?(x)
    加权平均法比较好理解,这里你也可以定义自己的组合策略

参考博客

adaboost做回归预测的时候,是怎么调整样本权重的?
机器学习校招笔记3:集成学习之Adaboost