美文网首页GBDT
Gradient Boosting Decision Tree

Gradient Boosting Decision Tree

作者: RouyiDing | 来源:发表于2016-07-07 10:53 被阅读1264次

    首先,区分概念:分类树&回归树分类树的准则是最大熵准则(相当于分得的两类远离1:1);回归树的准则是最小化均方差(实际值-预测值)^2/N。

    再总结下GBDT树:GBDT把所有树的结论累加起来做最终结论。它的核心是:每棵树学的是之前所有树结论和的残差,即真实值-预测值。在GBDT中,可以看到第一棵树的残差向量是(-1,1,-1,1),这就是Gradient,是全局最优方向,只是我们没有计算cost function,也没有求导。

    GBDT的优点在于:1.可以有效减少feature,降低过拟合现象。2.每一步的残差计算其实变相增大了分错instance的权重,而已经分队的instance则都趋于0。
    传统的决策树:

    Paste_Image.png

    GBDT:

    Paste_Image.png

    R Code:

    library(gbm)
    data(PimaIndiansDiabetes2,package='mlbench')
    
    # 把响应变量diabetes转换为0-1变量
    data <- PimaIndiansDiabetes2
    data$diabetes <- as.numeric(data$diabetes)
    data <- transform(data,diabetes=diabetes-1)
    head(data)
    
    # 使用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')  #1061
    
    # 观察各解释变量的重要程度
    summary(model,best.iter)
    # 变量的边际效应
    plot.gbm(model,1,best.iter)
    
    # 用caret包观察预测精度
    library(caret)
    data <- 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=best.iter,.shrinkage=0.01,.interaction.depth=1,.n.minobsinnode=3))
    model2
    

    相关文章

      网友评论

        本文标题:Gradient Boosting Decision Tree

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