A-07 前向分步算法
更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/
前向分步算法
一、前向分步算法引入
假设Nick的年龄是25岁。
- 第1棵决策树
把Nick的年龄设置成初始值0岁去学习,如果第1棵决策树预测Nick的年龄是12岁,即残差值为\(25-12=13\)
- 第2课决策树
- 把Nick的年龄设置成残差值13岁去学习,如果第2棵决策树能把Nick分到13岁的叶子节点,累加两棵决策树的预测值加和\(12+13=25\),就是Nick的真实年龄25岁
- 如果第2棵决策树的得到的是10岁,残差值为\(25-12-10=3\)
- 第3课决策树
把Nick的年龄设置成残差值3岁去学习……
- 继续重复上述过程学习,不断逼近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 流程
- 初始化\(f_0(x)=0\)
- 对\(t=1,2,\cdots,T\)
- 极小化目标函数
\[
(\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\) - 更新
\[
f_t(x)=f_{t-1}(x)+\theta_tb(x;\gamma_t)
\]
- 极小化目标函数
- 得到加法模型
\[
f(x)=f_T(x)=\sum_{t=1}^T\theta_tb(x;\gamma_t)
\]
A-07 前向分步算法的更多相关文章
- 前向分步算法 && AdaBoost算法 && 提升树(GBDT)算法 && XGBoost算法
1. 提升方法 提升(boosting)方法是一种常用的统计学方法,在分类问题中,它通过逐轮不断改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能 0x1: 提升方法的基本 ...
- 卷积神经网络 cnnff.m程序 中的前向传播算法 数据 分步解析
最近在学习卷积神经网络,哎,真的是一头雾水!最后决定从阅读CNN程序下手! 程序来源于GitHub的DeepLearnToolbox 由于确实缺乏理论基础,所以,先从程序的数据流入手,虽然对高手来讲, ...
- 机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能
前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第7章 - 利用AdaBoost元算法提高分类性能. 核心思想 在使用某个特定的算法是, ...
- 深度神经网络(DNN)模型与前向传播算法
深度神经网络(Deep Neural Networks, 以下简称DNN)是深度学习的基础,而要理解DNN,首先我们要理解DNN模型,下面我们就对DNN的模型与前向传播算法做一个总结. 1. 从感知机 ...
- 卷积神经网络(CNN)前向传播算法
在卷积神经网络(CNN)模型结构中,我们对CNN的模型结构做了总结,这里我们就在CNN的模型基础上,看看CNN的前向传播算法是什么样子的.重点会和传统的DNN比较讨论. 1. 回顾CNN的结构 在上一 ...
- 前向传播算法(Forward propagation)与反向传播算法(Back propagation)
虽然学深度学习有一段时间了,但是对于一些算法的具体实现还是模糊不清,用了很久也不是很了解.因此特意先对深度学习中的相关基础概念做一下总结.先看看前向传播算法(Forward propagation)与 ...
- 2. CNN卷积网络-前向传播算法
1. CNN卷积网络-初识 2. CNN卷积网络-前向传播算法 3. CNN卷积网络-反向更新 1. 前言 我们已经了解了CNN的结构,CNN主要结构有输入层,一些卷积层和池化层,后面是DNN全连接层 ...
- JavaScript笔记 #07# 用js写算法
算法盒子初代(为了提高学习算法的热情...) 效果图: 所有代码放在单个html中: <!DOCTYPE html> <html> <head> <meta ...
- 隐马尔可夫(HMM)、前/后向算法、Viterbi算法
HMM的模型 图1 如上图所示,白色那一行描述由一个隐藏的马尔科夫链生成不可观测的状态随机序列,蓝紫色那一行是各个状态生成可观测的随机序列 话说,上面也是个贝叶斯网络,而贝叶斯网络中有这么一种,如下 ...
随机推荐
- 携程PMO--小罗说敏捷之WIP限制在制品
转自本人运营的公众号“ 携程技术中心PMO”(ID:cso_pmo) WIP是什么? WIP(work in progress)指的就是工作中心在制品区.在经过部分制程之后,还没有 ...
- 阿里巴巴资深技术专家雷卷:值得开发者关注的 Java 8 后时代的语言特性
作者 | 阿里巴巴资深技术专家 雷卷,GitHub ID @linux-china 导读:在 Python.JavaScript 等一众编程语言崛起风靡之际,一代霸主 Java 风采虽不及当年,但仍 ...
- Erlang 不同版本内容
OTP 22.0 Erlang/OTP 22是一个新的主要版本,具有新的特性和改进,同时也具有不兼容性. 要更深入地了解OTP 22发行版的亮点,您可以阅读我们的博客: http://blog.erl ...
- SpringBoot 参数校验的方法
Introduction 有参数传递的地方都少不了参数校验.在web开发中,前端的参数校验是为了用户体验,后端的参数校验是为了安全.试想一下,如果在controller层中没有经过任何校验的参数通过s ...
- Linux基础提高_sudo,行为审计,跳板机
sudo 临时给普通用户赋予root权限的一种方式 echo "%wheel ALL=(ALL) NOPASSWD: ALL" >>/etc/ ...
- Python默认参数
在python函数中, 可以使用如下方式声明并初始化参数 def to_smash(total_candies, n_friends=3): """Return the ...
- [1]尝试用Unity3d制作一个王者荣耀(持续更新)->AssetBundle管理器
如果已经看过本章节:目录传送门:这是目录鸭~ 1.AssetBundleManager: 首先我们创建一个文件夹,叫AssetBundleManager,再创建Csharp(即C#)脚本,名为Asse ...
- IDEA 如何开启Run DashBoard
运用spring cloud框架基于spring boot构建微服务,一般需要启动多个应用程序,在idea开发工具中,多个同时启动的应用在RunDashboard运行仪表盘中可以更好的管理,使用Run ...
- linux安装python串口工具pyserial遇到不能成功导入的问题
常规方法:pip install pyserial导入serial后提示: 解决方法:apt install python3-serial 参考:https://stackoverflow.com/q ...
- Linux服务器端口access改为trunk all
1.确认可用网卡及vlan id eth5可用 vlan25:10.118.25.0/24 2.编辑网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-et ...