更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/

前向分步算法

一、前向分步算法引入

假设Nick的年龄是25岁。

  1. 第1棵决策树

把Nick的年龄设置成初始值0岁去学习,如果第1棵决策树预测Nick的年龄是12岁,即残差值为\(25-12=13\)

  1. 第2课决策树

    1. 把Nick的年龄设置成残差值13岁去学习,如果第2棵决策树能把Nick分到13岁的叶子节点,累加两棵决策树的预测值加和\(12+13=25\),就是Nick的真实年龄25岁
    2. 如果第2棵决策树的得到的是10岁,残差值为\(25-12-10=3\)
  2. 第3课决策树

把Nick的年龄设置成残差值3岁去学习……

  1. 继续重复上述过程学习,不断逼近Nick的真实年龄

二、前向分步算法详解

2.1 加法模型

加法模型(additive model)一般表示为弱学习器加和
\[
f(x) = \sum_{t=1}^T\theta_tb(x;\gamma_t)
\]
其中\(b(x;\gamma_t)\)为弱学习器,\(\gamma_t\)为弱学习器的参数,\(\theta_t\)为弱学习器的系数。

2.2 加法模型目标函数优化问题

给定训练数据以及目标函数\(L(y,f(x))\),加法模型的经验风险最小化问题既可以变为目标函数最小化问题
\[
\underbrace{min}_{\theta_t,\gamma_t}\sum_{i=1}^mL(y_i,\sum_{t=1}^T\theta_tb(x_i;\gamma_t))
\]
上述加法模型的目标函数优化问题是一个很复杂的优化问题,但是通过前向分布算法(forward stagewise algorithm)可以解决这一问题,它的思想是:因为学习问题是加法模型,所以每一步只学习一个弱学习器及其系数,然后逐步逼近优化目标函数,也就是说,每一步只需要优化如下所示的目标函数
\[
\underbrace{min}_{\theta,\gamma}\sum_{i=1}^mL(y_i,\theta{b(x_i;\gamma)})
\]

三、前向分步算法流程

3.1 输入

有\(m\)个数据\(n\)个特征的训练数据集\(T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\}\);目标函数\(L(y,f(x))\);弱学习模型集\(\{b(x;\gamma_t)\},\quad(t=1,2,\cdots,T)\),在Boosting算法中\(T\)相当于弱学习器的个数。

3.2 输出

加法模型\(f(x)\)。

3.3 流程

  1. 初始化\(f_0(x)=0\)
  2. 对\(t=1,2,\cdots,T\)
    1. 极小化目标函数
      \[
      (\theta_t,\gamma_t)=\underbrace{arg\,min}_{\theta,\gamma}\sum_{i=1}^mL(y_i,f_{t-1}(x_i)+\theta{b(x_i;\gamma)})
      \]
      得到参数\(\theta_t,\gamma_t\)
    2. 更新
      \[
      f_t(x)=f_{t-1}(x)+\theta_tb(x;\gamma_t)
      \]
  3. 得到加法模型
    \[
    f(x)=f_T(x)=\sum_{t=1}^T\theta_tb(x;\gamma_t)
    \]

A-07 前向分步算法的更多相关文章

  1. 前向分步算法 && AdaBoost算法 && 提升树(GBDT)算法 && XGBoost算法

    1. 提升方法 提升(boosting)方法是一种常用的统计学方法,在分类问题中,它通过逐轮不断改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能 0x1: 提升方法的基本 ...

  2. 卷积神经网络 cnnff.m程序 中的前向传播算法 数据 分步解析

    最近在学习卷积神经网络,哎,真的是一头雾水!最后决定从阅读CNN程序下手! 程序来源于GitHub的DeepLearnToolbox 由于确实缺乏理论基础,所以,先从程序的数据流入手,虽然对高手来讲, ...

  3. 机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第7章 - 利用AdaBoost元算法提高分类性能. 核心思想 在使用某个特定的算法是, ...

  4. 深度神经网络(DNN)模型与前向传播算法

    深度神经网络(Deep Neural Networks, 以下简称DNN)是深度学习的基础,而要理解DNN,首先我们要理解DNN模型,下面我们就对DNN的模型与前向传播算法做一个总结. 1. 从感知机 ...

  5. 卷积神经网络(CNN)前向传播算法

    在卷积神经网络(CNN)模型结构中,我们对CNN的模型结构做了总结,这里我们就在CNN的模型基础上,看看CNN的前向传播算法是什么样子的.重点会和传统的DNN比较讨论. 1. 回顾CNN的结构 在上一 ...

  6. 前向传播算法(Forward propagation)与反向传播算法(Back propagation)

    虽然学深度学习有一段时间了,但是对于一些算法的具体实现还是模糊不清,用了很久也不是很了解.因此特意先对深度学习中的相关基础概念做一下总结.先看看前向传播算法(Forward propagation)与 ...

  7. 2. CNN卷积网络-前向传播算法

    1. CNN卷积网络-初识 2. CNN卷积网络-前向传播算法 3. CNN卷积网络-反向更新 1. 前言 我们已经了解了CNN的结构,CNN主要结构有输入层,一些卷积层和池化层,后面是DNN全连接层 ...

  8. JavaScript笔记 #07# 用js写算法

    算法盒子初代(为了提高学习算法的热情...) 效果图: 所有代码放在单个html中: <!DOCTYPE html> <html> <head> <meta ...

  9. 隐马尔可夫(HMM)、前/后向算法、Viterbi算法

    HMM的模型  图1 如上图所示,白色那一行描述由一个隐藏的马尔科夫链生成不可观测的状态随机序列,蓝紫色那一行是各个状态生成可观测的随机序列 话说,上面也是个贝叶斯网络,而贝叶斯网络中有这么一种,如下 ...

随机推荐

  1. 什么是WSGI

    WSGI全称为Python Web Server Gateway Interface,Python Web服务器网关接口,它是介于Web服务器和Web应用程序(或Web框架)之间的一种简单而通用的接口 ...

  2. 【Spring】编程式事务和声明式事务

    一.概述 二.准备工作 1. 创建表 2. 创建项目并引入Maven依赖 3. 编写实体类 4. 编写Dao层 5. 业务层 6. XML中的配置 7. 测试 三.编程式事务 1. 在业务层代码上使用 ...

  3. 关于重写对象equals方法的问题

    1.==和equals的区别 a.基本数据类型使用  == 进行值的比较 b.引用类型使用 == 进行比较时,直接比较的是对象的存储地址,即两个引用是否指向了同一个对象. c.equals方法是基类O ...

  4. JS枚举对象属性的方法及其区别

    愉快的中秋节要过去了,国庆倒计时两个周!!! 闲话不多说,那今天我们来看一看JS中枚举对象属性的方法有哪些以及他们的区别 首先在JS里面枚举对象属性一共有三种方法 for in: 会遍历对象中所有的可 ...

  5. C#中将表示颜色的string转换成Color

    场景 在Winform中需要存储某控件的Color属性,存储的是string字符串, 然后再对控件进行赋值时需要将string转换成Color. 实现 myPane.YAxis.Color = Sys ...

  6. ubuntu 12.04下访问windows共享文件夹

    ubuntu 12.04LTS已经不支持smbfs文件系统,所以不能用mount -smbfs 来映射windows共享文件夹. 常见有两种方法 1.terminal下 mount //192.168 ...

  7. 如何更规范化使用MySQL

    如何更规范化使用MySQL 背景:一个平台或系统随着时间的推移和用户量的增多,数据库操作往往会变慢:而在Java应用开发中数据库更是尤为重要,绝大多数情况下数据库的性能决定了程序的性能,如若前期埋下的 ...

  8. 删除linux自带jdk

    提示:error: can't create transaction lock on /var/lib/rpm/.rpm.lock (Permission denied):代表权限不够 执行:su r ...

  9. 公开的免费WebService接口分享,用于做接口练习

    本文转载于 https://cloud.tencent.com/developer/article/1349603 天气预报Web服务,数据来源于中国气象局 Endpoint http://www.w ...

  10. Scala Data Structure

    Arrays Array 固定长度:ArrayBuffer 可变长度 arr.toBuffer, buf.toArray 初始化是不要使用 new 使用 () 访问元素 使用 for (elem &l ...