前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【原创精品】使用R语言gbm包实现梯度提升算法

【原创精品】使用R语言gbm包实现梯度提升算法

作者头像
量化投资与机器学习微信公众号
发布2018-01-29 17:16:04
4.9K0
发布2018-01-29 17:16:04
举报

原创推文预告(绿色为已发布,点击标题即可阅读)

随机森林在因子选择上的应用基于Matlab

择时策略:在一天的何时进行交易

主题模型 - LDA学习笔记(一)

● 朴素贝叶斯对垃圾邮件进行分类基于Python

● R语言构建追涨杀跌量化交易模型

● R语言量化投资常用包总结

● R语言者如何使用Python在数据科学方面

● 国外书籍放送:Math、ML、DL(干货)

● 免费网络课程:ML和AI(干货)

● 实用指南在R聚类算法和评价的介绍

● 朴素贝叶斯算法在Python和R的应用

所有编辑部原创文章,未经授权

任何个人和机构不得以任何方式转载

gbm-Gradient Boost Machinet 梯度提升算法

梯度提升算法Gradient Boosting Machine,属于模型集成方法中的boosting类方法。通常来说模型集成能够大大提高模型表现,减少单个模型预测的偏差和方差,因此深受数据分析人士的喜爱。

最基础的模型集成方法,即生成多个模型(也叫基础学习器base learner)后,取预测平均数(如线性回归)或以多数投票表决(如决策树等分类问题)为模型结果。为了训练出不同的模型,需要对训练集进行Bootstrap抽样,这种方法于1996年由Breiman提出,叫做bagging,是较为简单的模型集成法。而bagging与boosting的主要区别,即boosting算法中基础学习器的训练往往以上一个基础学习器的结果为基础,对上一个基础学习器有所改进。每一次训练也叫做一次迭代,对于boosting,模型集成是有先后训练顺序的基础学习器的加总,而bagging是彼此没有关系的基础学习器的加总。

boost也分为许多种类,如AdaBoost、Gradient Boost、XGBoost等,Gradient Boost顾名思义,与梯度脱不开关系,对梯度有了解或学过数值计算的人应当知道,负梯度方向是函数下降最快的方向。在有监督机器学习中,我们的目标是学得使得损失函数最小的模型,因此梯度下降算法的目标则是在每一轮迭代中,求得当前模型的损失函数的负梯度方向,乘以一定的步长(即学习速率),加到当前模型中形成此轮迭代产生的新模型,从而达到每一轮迭代后的模型,相比上轮模型,都可以使得损失函数更小的目的。

因此对于Gradient Boost Machine来说重要的变量有:迭代次数M、损失函数的形式ψ(y,f)和基础学习器的形式h(x,θ)。确定了以上变量后,Gradient Boost Machine的算法如下:

1、以常数初始化函数f0

2、从第1到第M次迭代:

3、计算负梯度函数gt(x)

4、训练新的基础学习器h(x, θt)

5、找到最佳步长ρt使得

gbm包

实际上,梯度提升算法并不特指某个特定模型,而是一种机器学习思想,被人们运用到许多传统的模型中而形成了一类强大的机器学习方法。有趣的是,gbm包的全称也并不是Gradient Boost Machine,而是generalized boosted regression models—广义提升回归模型,即运用了boosting算法的广义回归模型,既可以解决回归问题,也可以解决分类问题。

gbm包中最主要的函数为gbm/gbm.fit。函数提供了很多参数以进行模型调优。

(1)distribution:模型计算损失函数时,需要对输出变量的数据分布做出假设。一般来说,对于分类问题,选择bernoulli或者adaboost,前者更为推荐;对于连续因变量,选择gaussian或者laplace。此外,gbm包还为一些具体问题提供了不少其他选择。

(2)shrinkage:学习速率,即每一步迭代中向梯度下降方向前进的速率。一般来说学习速率越小,模型表现越好。令shrinkage=0.001得出的模型几乎一定比shrinkage=0.01的模型好,然而代价是前者运算所需的时间和所耗内存将是后者的10倍。所以选择的准则是在可以承受的时间和内存范围内,shrinkage越小越好。

(3)n.trees:即number of iteration—迭代次数。迭代次数的选择与学习速率密切相关,下图展示了模型表现、学习速率和迭代次数之间的关系:

迭代次数可以设得稍微大一点,因为模型训练完后,gbm中的gbm.perf可以估计出最佳迭代次数以供预测阶段使用。在模型训练阶段,gbm作者的经验法则是:3000-10000之间的迭代次数搭配0.01-0.001之间的学习速率。

(4)interaction.depth和n.minobsinnode:子决策树即基础学习器的深度和决策树叶节点包含的最小观测树,若基础学习器训练得过于复杂,将提升模型对于样本的拟合能力而导致过拟合问题,因此子决策树深度不宜过大,叶节点可包含的最小观测书不宜过小。

实现

本文以kaggle上著名的titanic生还预测问题为例,演示如何用R语言实现这一强大的算法。具体问题介绍可移步:https://www.kaggle.com/c/titanic.

获取数据:

首先对数据集进行前期考察:

字段意义:

PassengerId:乘客ID;Pclass:乘客等级;Name:乘客姓名;Sex:性别;Age:年龄;SibSp:堂兄弟/妹个数;Parch:父母与小孩个数;Ticket:船票信息,Fare:票价;Cabin:客舱;Embarked:登船舱口。

可知训练数据集包含12个变量,891个观测;测试数据集则少了目标变量Survived,包含11个变量。由于Name属性和ticket属性取值过散、PassengerID只是计数变量,我们认为预测意义不大,故在建模中舍弃。

summary函数返回自变量的相对重要性,可看出票价、年龄、性别三个变量对于结果预测非常重要。因此gbm也是一种很有用的变量筛选方法,当自变量个数较多带来信息噪声时,bgm将会给噪声变量赋予接近于0的相对重要性。

gbm.perf函数返回最佳迭代次数,由图可看出迭代到第1364次时,模型表现不再有进一步的提升,因此最佳迭代次数为1364。

样本内预测准确度为0.87

在gaggle上提交结果:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量化投资与机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档