R 梯度提升算法①

用gbm包实现随机梯度提升算法

自适应提升方法AdaBoost

它是一种传统而重要的Boost算法,在学习时为每一个样本赋上一个权重,初始时各样本权重一样。在每一步训练后,增加错误学习样本的权重,这使得某些样本的重要性凸显出来,在进行了N次迭代后,将会得到N个简单的学习器。最后将它们组合起来得到一个最终的模型。

梯度提升方法Gradient Boosting

梯度提升算法初看起来不是很好理解,但我们和线性回归加以类比就容易了。回忆一下线性回归是希望找到一组参数使得残差最小化。如果只用一次项来解释二次曲线一定会有大量残差留下来,此时就可以用二次项来继续解释残差,所以可在模型中加入这个二次项。

  • 在gbm包中,采用的是决策树作为基学习器,重要的参数设置如下:
  • 损失函数的形式(distribution)
  • 迭代次数(n.trees)
  • 学习速率(shrinkage)
  • 再抽样比率(bag.fraction)
  • 决策树的深度(interaction.depth)
  • 损失函数的形式容易设定,分类问题一般选择bernoulli分布,而回归问题可以选择gaussian分布。学习速率方面,我们都知道步子迈得太大容易扯着,所以学习速率是越小越好,但是步子太小的话,步数就得增加,也就是训练的迭代次数需要加大才能使模型达到最优,这样训练所需时间和计算资源也相应加大了。gbm作者的经验法则是设置shrinkage参数在0.01-0.001之间,而n.trees参数在3000-10000之间。
setwd("E:\\Rwork")
if(!suppressWarnings(require('gbm')))
{
  install.packages('gbm')
  require('gbm')
}


# 加载包和数据
library(gbm)
data(PimaIndiansDiabetes2,package='mlbench')
# 将响应变量转为0-1格式
data <- PimaIndiansDiabetes2
data$diabetes <- as.numeric(data$diabetes)
data <- transform(data,diabetes=diabetes-1)
# 使用gbm函数建模
model <- gbm(diabetes~.,data=data,shrinkage=0.01,
             distribution='bernoulli',cv.folds=5,
             n.trees=3000,verbose=F)
# 用交叉检验确定最佳迭代次数
best.iter <- gbm.perf(model,method='cv')

# 观察各解释变量的重要程度
summary(model,best.iter)

# 变量的边际效应
plot.gbm(model,1,best.iter)
library(caret)
data <- na.omit(PimaIndiansDiabetes2)
fitControl <- trainControl(method = "cv", 
                           number = 5,
                           returnResamp = "all")
model2 <- train(diabetes~., 
                data=data,method='gbm',
                distribution='bernoulli',
                trControl = fitControl,
                verbose=F,
                tuneGrid = data.frame(n.trees=1200,shrinkage=0.01,interaction.depth=1, n.minobsinnode = 10))
model2
 Stochastic Gradient Boosting 

392 samples
  8 predictor
  2 classes: 'neg', 'pos' 

No pre-processing
Resampling: Cross-Validated (5 fold) 
Summary of sample sizes: 314, 314, 313, 314, 313 
Resampling results:

  Accuracy   Kappa    
  0.7780915  0.4762955

Tuning parameter 'n.trees' was held constant at a value of 1200
Tuning parameter 'interaction.depth' was
 held constant at a value of 1
Tuning parameter 'shrinkage' was held constant at a value of 0.01

Tuning parameter 'n.minobsinnode' was held constant at a value of 10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

教程 | 将注意力机制引入RNN,解决5大应用领域的序列预测问题

3764
来自专栏数据科学与人工智能

【算法】word2vec与doc2vec模型

小编邀请您,先思考: 1 word2vec算法原理是什么? 2 word2vec与doc2vec有什么差异? 3 如何做word2vec和doc2vec? 深度...

7097
来自专栏量子位

超分辨率技术如何发展?这6篇ECCV 18论文带你一次尽览

在这篇文章中,亲历了ECCV 2018的机器学习研究员Tetianka Martyniuk挑选了6篇ECCV 2018接收论文,概述了超分辨率(Super-Re...

1.2K2
来自专栏PPV课数据科学社区

干货:基于树的建模-完整教程(R & Python)

来源:“数盟社区” 原文链接:http://dataunion.org/23697.html 简介 基于树的学习算法被认为是最好的方法之一,主要用于监测学习方...

3897
来自专栏CreateAMind

原始图片中的ROI如何映射到到feature map?

最后找到一篇靠谱的文章 卷积神经网络物体检测之感受野大小计算 - machineLearning - 博客园,它给出了一个不错的启发,还附带了代码,最关键的是它...

2144
来自专栏AI研习社

如何使用高大上的方法调参数

本文主要介绍作者与 Elad Hazan, Adam Klivans 合作的最新论文: Hyperparameter Optimization: A Spec...

3659
来自专栏新智元

机器学习:用初等数学解读逻辑回归

逻辑回归问题的通俗几何描述 逻辑回归处理的是分类问题。我们可以用通俗的几何语言重新表述它: 空间中有两群点,一群是圆点“〇”,一群是叉点“X”。我们希望从空间...

36215
来自专栏磐创AI技术团队的专栏

详解谱聚类原理

2153
来自专栏YoungGy

矩阵求导与实例

缘由 布局 求导的类别 从简单的例子说起 实例 SVM的对偶形式转换 Soft-SVM对偶形式转换 线性回归 logistic回归 参考资料 缘由 机器学习的很...

25410
来自专栏大数据挖掘DT机器学习

基于树的预测模型-完整教程

基于树的学习算法被认为是最好的方法之一,主要用于监测学习方法。基于树的方法支持具有高精度、高稳定性和易用性解释的预测模型。不同于线性模型,它们映射非线性关系相当...

2915

扫码关注云+社区

领取腾讯云代金券