R 梯度提升算法①

作者: 柳叶刀与小鼠标 | 来源:发表于2018-01-21 04:13 被阅读14次

    用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
    

    相关文章

      网友评论

        本文标题:R 梯度提升算法①

        本文链接:https://www.haomeiwen.com/subject/dtyxaxtx.html