AdaBoost 算法:回归问题

前言

在《统计学习方法》这本书中介绍了基于分类问题的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=maxyiGm(xi)
    为什么不取全体样本误差总值?
  • 计算每个样本的相对误差:
    e m i = ∣ y i − G m ( x I ) ∣ E m e_{mi}=\frac{|y_i - G_m(x_I)|}{E_m} emi=EmyiGm(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=Em2yiGm(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=1Nwmiemi
  • 由此得到弱学习器权重系数:
    a m = e m 1 − e m a_m = \frac{e_m}{1-e_m} am=1emem

这里有一个问题, 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=Zmwmiam1emi
    其中 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=1Nwmiam1emi
    这有点像样本误差除以所有误差,计算当个样本误差占比,这个用来作为样本权重。
  • 最后是结合策略,和分类问题稍有不同,采用的是对加权的弱学习器取中位数的方法,最终的强回归器为:
    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(am1))g(x)=[m=1M(ln(am1))]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 amGm(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(lnam1)Gm(x)
    加权平均法比较好理解,这里你也可以定义自己的组合策略

参考博客

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

  • 9
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
AdaBoost回归算法是一种集成学习算法,用于解决回归问题。它通过组合多个弱回归器来构建一个强回归器。每个弱回归器都是在前一个弱回归器的残差上进行训练,以逐步减小误差。AdaBoost回归算法的核心思想是通过加权平均的方式将多个弱回归器的预测结果进行组合,从而得到最终的回归结果。 在sklearn中,AdaBoost回归算法的实现可以使用AdaBoostRegressor类。这个类提供了一些参数和方法,用于调整和使用AdaBoost回归算法。 以下是使用AdaBoostRegressor完成回归任务的示例代码: ```python from sklearn.ensemble import AdaBoostRegressor from sklearn.datasets import make_regression from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt # 创建回归数据集 X, y = make_regression(n_samples=100, n_features=1, noise=0.1) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # 创建AdaBoost回归器 regressor = AdaBoostRegressor(n_estimators=100, learning_rate=0.1) # 拟合训练数据 regressor.fit(X_train, y_train) # 预测测试数据 y_pred = regressor.predict(X_test) # 绘制结果 plt.scatter(X_test, y_test, color='blue', label='Actual') plt.scatter(X_test, y_pred, color='red', label='Predicted') plt.legend() plt.show() ``` 这段代码首先使用make_regression函数创建一个回归数据集,然后将数据集分为训练集和测试集。接下来,创建一个AdaBoost回归器,并使用fit方法拟合训练数据。最后,使用predict方法预测测试数据,并使用matplotlib库绘制实际值和预测值的散点图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值