首页 > 其他分享 >统计学习方法学习笔记-08-提升方法

统计学习方法学习笔记-08-提升方法

时间:2022-10-07 19:56:37浏览次数:50  
标签:beta 分类器 08 cdots 学习 算法 方法 sum gamma

首先介绍提升算法的思路和代表性的提升算法AdaBoost,然后分析AdaBoost为什么可以提高学习精度,从前向分步加法模型的角度解释AdaBoost,最后介绍提升方法更具体的实力,提升树boosting tree

提升方法AdaBoost算法

提升方法的基本思路

三个臭皮匠顶个诸葛亮,在概率近似正确PAC框架中

  • 强可学习:一个类如果存在一个多项式的学习算法能够学习它,并且正确率很高;
  • 弱可学习:一个类如果存在一个多项式的学习算法能够学习它,正确率仅比随机猜测要好,这个类就是弱可学习的

弱可学习算法更容易发现,也就是求弱分类器比求强分类器容易,提升算法就是从弱分类器算法出发,反复学习求得一系列弱分类器,然后组合这些弱分类器,构成一个强分类器,这些弱分类器是通过改变训练数据的概率分布来学习到的,提升算法主要关注:每一轮如何改变训练数据的概率分布或权值,如何将弱分类器组合成为强分类器

AdaBoost算法

输入:训练数据集\(T = \{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}\),其中\(x_i \in \mathcal{X} \subseteq R^n,y_i \in \mathcal{Y} = \{-1,+1\}\),弱分类器算法
输出:最终分类器\(G(x)\)

  • 初始化训练数据的权值分布

\[D_1 = (w_{11},\cdots,w_{1i},\cdots,w_{1N}),w_{1i} = \frac{1}{N},i = 1,2,\cdots,N \]

  • 使用具有权值分布\(D_m\)的训练数据集学习,得到基本分类器

\[G_m(x):\mathcal{X} \rightarrow \{-1,+1\} \]

  • 计算\(G_m(x)\)在训练数据集上的分类误差率

\[e_m = \sum_{i = 1}^NP(G_m(x_i) \neq y_i) = \sum_{i = 1}^Nw_{mi}I(G_m(x_i) \neq y_i) \]

  • 计算\(G_m(x)\)的系数

\[\alpha_m = \frac{1}{2}\log \frac{1 - e_m}{e_m} \]

这里的对数是自然对数

  • 更新训练数据集的权值分布

\[D_{m + 1} = (w_{m + 1,1},\cdots,w_{m + 1,i}, \cdots, w_{m + 1,N}) \\ w_{m + 1,i} = \frac{w_{mi}}{Z_m}exp(-\alpha_my_iG_m(x_i)),i = 1,2,\cdots,N \]

\(Z_m\)是规范化因子

\[Z_m = \sum_{i = 1}^Nw_{mi}exp(-\alpha_my_iG_m(x_i)),i = 1,2,\cdots,N \]

  • 构建基本分类器的线性组合

\[f(x) = \sum_{m = 1}^{M}\alpha_mG_m(x) \]

得到最终的分类器:

\[G(x) = sign(f(x)) = sign\left(\sum_{m = 1}^{M}\alpha_mG_m(x)\right) \]

AdaBoost算法的训练误差分析

  • AdaBoost算法最终分类器的训练误差界为:

\[\frac{1}{N}\sum_{i = 1}^NI(G(x_i) \neq y_i) \leq \frac{1}{N}\sum_iexp(-y_if(x_i)) = \prod_mZ_m \]

可以在每一轮选择适当的\(G_m\)使得\(Z_m\)最小,从而使得训练误差下降得最快

  • 对于二类分类问题:二类分类问题AdaBoost的训练误差界

\[\prod_{m = 1}^MZ_m \leq exp\left(-2\sum_{m = 1}^M\gamma_m^2\right) \]

其中\(\gamma_m = \frac{1}{2} - e_m\)

  • 如果存在\(\gamma \gt 0\)对所有\(m\)有\(\gamma_m \geq \gamma\)则有:

\[\frac{1}{N}\sum_{i = 1}^NI(G(x_i) \neq y_i) \leq exp(-2M\gamma^2) \]

AdaBoost的训练误差是以指数速率下降的

AdaBoost算法的解释

可以认为AdaBoost算法是加法模型、损失函数为指数函数、学习算法为前向分步算法时的二类分类学习算法

前向分步算法

加法模型如下:

\[f(x) = \sum_{m = 1}^M\beta_mb(x;\gamma_m) \]

其中\(b(x;\gamma_m)\)是基函数,\(\gamma_m\)是基函数的参数,\(\beta_m\)是基函数的系数,在给定训练数据及损失函数\(L(y,f(x))\)的条件下,学习加法模型\(f(x)\)称为经验风险最小化即损失函数极小化的问题:

\[\mathop{min}\limits_{\beta_m,\gamma_m}\sum_{i = 1}^N\left(y_i,\sum_{m = 1}^M\beta_mb(x;\gamma_m)\right) \]

前向分步算法求解这一个问题的思路是每次只学习一个基函数及其系数,逐步逼近优化目标函数式,就可以简化优化的复杂度,也就是每次可以只优化如下损失函数:

\[\mathop{min}\limits_{\beta,\gamma}\sum_{i = 1}^N\left(y_i,\beta b(x;\gamma)\right) \]

前向分步算法总结如下:
输入:训练数据集\(T = \{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}\),损失函数\(L(y,f(x))\),基函数集\(\{b(x;\gamma)\}\)
输出:加法模型\(f(x)\)

  • 初始化\(f_0(x) = 0\)
  • 对\(m = 1,2,\cdots,M\)
    极小化损失函数:

\[(\beta_m,\gamma_m) = arg \mathop{min}\limits_{\beta.\gamma}\sum_{i = 1}^NL(y_i,f_{m - 1}(x_i) + \beta b(x_i;\gamma)) \]

得到参数\(\beta_m,\gamma_m\)
更新:

\[f_m(x) = f_{m - 1}(x) + \beta_mb(x;\gamma_m) \]

  • 得到加法模型

\[f(x) = f_M(x) = \sum_{m = 1}^M\beta_mb(x;\gamma_m) \]

前向分步算法将同时求解从\(m = 1\)到\(M\)的所有参数\(\beta_m,\gamma_m\)的优化问题简化为逐次求解各个\(\beta_m,\gamma_m\)的优化问题

前向分步算法与AdaBoost

  • AdaBoost算法是前向分步算法的特例,这时,模型是由基本分类器组成的加法模型,损失函数是指数函数

提升树

提升树是以分类树或回归树为基本分类器的提升方法

提升树模型

提升树boosting tree:采用加法模型即基函数的线性组合与前向分步算法,以决策树为基函数的提升方法,对分类问题是二叉分类树,对回归问题是二叉回归树
提升树模型可以表示为决策树的加法模型:

\[f_M(x) = \sum_{m = 1}^MT(x;\theta_m) \]

其中,\(T(x,\theta_m)\)表示决策树,\(\theta_m\)为决策树的参数,\(M\)为决策树的个数

回归问题的提升树算法

对于二类分类问题,提升树算法只需要将上面的基本分类器的种类限制为二类分类树即可,下面叙述回归问题的提升树:
输入:训练数据集\(T \{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},x_i \in \mathcal{X} \subseteq R^n,y_i \in \mathcal{Y}\subseteq R\)
输出:提升树\(f_M(x)\)

  • 初始化\(f_0(x) = 0\)
  • 对\(m = 1,2,\cdots,M\)
    因为采用平方误差损失函数:

\[\begin{aligned} L(y,f_{m - 1}(x) + T(x;\theta_m)) &= [y - f_{m - 1}(x) - T(x;\theta_m)]^2 \\ &= [r - T(x;\theta_m)]^2 \\ r &= y - f_{m - 1}(x) \end{aligned} \]

所以计算残差:

\[r_{mi} = y_i - f_{m - 1}(x_i),i = 1,2,\cdots,N \]

拟合残差\(r_{mi}\)学习一个回归树。得到\(T(x;\theta_m)\)
更新\(f_m(x) = f_{m - 1}(x) + T(x;\theta_m)\)

  • 得到回归问题提升树

\[f_M(x) = \sum_{m = 1}^MT(x;\theta_m) \]

梯度提升

目的:当损失函数是平方损失和指数损失的时候,每一步优化是简单的,但是对于一般损失函数,每一步优化没有那么简单,梯度提升gradient boosting算法是利用损失函数的负梯度在当前模型的值

\[-\left[\frac{\partial L(y,f(x_i))}{\partial f(x_i)}\right]_{f(x) = f_{m - 1}(x)} \]

作为回归问题提升树算法中的残差的近似值
输入:训练数据集\(T \{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},x_i \in \mathcal{X} \subseteq R^n,y_i \in \mathcal{Y}\subseteq R\),损失函数\(L(y,f(x))\)
输出:回归树\(\hat{f}(x)\)

  • 初始化

\[f_0(x) = arg \mathop{min}\limits_{c}\sum_{i = 1}^NL(y_i,c) \]

  • 对\(m = 1,2,\cdots,M\)
    对\(i = 1,2,\cdots,N\)计算

\[r_{mi} = -\left[\frac{\partial L(y,f(x_i))}{\partial f(x_i)}\right]_{f(x) = f_{m - 1}(x)} \]

对\(r_{mi}\)拟合一个回归树,得到第\(m\)棵树的叶结点区域\(R_{mj},j = 1,2,\cdots,J\)
对\(j = 1,2,\cdots,J\)计算

\[c_{mj} = arg \mathop{min}\limits_c\sum_{x_i \in R_{mj}}L(y_i,f_{m - 1}(x_i) +c) \]

更新\(f_m(x) = f_{m - 1}(x) + \sum_{j = 1}^Jc_{mj}I(x \in R_{mj})\)

  • 得到回归树

\[\hat{f}(x) = f_M(x) = \sum_{m = 1}^M\sum_{j = 1}^Jc_{mj}I(x \in R_{mj}) \]

标签:beta,分类器,08,cdots,学习,算法,方法,sum,gamma
From: https://www.cnblogs.com/eryoyo/p/16760530.html

相关文章

  • java之File的一些常用方法
    文件夹操作-->File-file类可以操作文件和文件夹###File的一些常用方法:-stringgetName():获取文件/文件夹的名字-booleanexists():判断文件是否存在-create......
  • 2022-10-07-学习内容
    1.设置文本字体大小1.1activity_text_size.xml<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"......
  • 关于学习
    学习的态度人生在世,学习是必不可少的。日积月累的学识能成为自己的一把利剑,斩断一切虚茫。所以,对待学习不能以功利的方式。升学和求职当然需要必要的针对性的准备,但是绝不......
  • 数维图API文档:SovitJS编辑器开放API调用方法
    SovitChart、Sovit2D、Sovit3D已经在众多行业领域被使用,也受到了大家的一致好评,为了更好的二次开发,不少用户想把我们的编辑器集成在自己的系统中,强烈要求我们开放API接口,经......
  • 学习笔记jira项目1-课程导学
         ......
  • 学习笔记jira项目3-解决一些问题
    解决相对路径问题ts.config.json  "baseUrl":"./src",prettieryarnadd--dev--exactprettier自动格式化npxmrmlint-staged"lint-staged":{"*.{j......
  • 学习笔记jira项目4-对比常见mock方案
    第一种方式第二种 3接口管理工具  4本地node服务器  ......
  • map遍历的5种方法分享
    转自:​​http://www.java265.com/JavaJingYan/202206/16545078043664.html​​下文笔者将讲述对map循环遍历的方法分享,如下所示:Map是我们日常开发中常用的数据容器那么如......
  • Vue splice方法使用
    语法格式:splice(index,len,[item])可以用来替换/删除/添加数组内某一个值或几个值,该方法会改变初始数组。index:数组开始下标len:替换/删除的长度item:替换的值,为删除时......
  • 20220819报错信息
    ​​https://jingyan.baidu.com/article/6079ad0e99bb8228ff86db2b.html​​​​https://www.ilovematlab.cn/thread-559419-1-1.html​​​​https://www.codenong.com/414......