Gradient Boosting Decision Tree (GBDT) 决策树

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

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

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

Gradient Boosting Decision Tree (GBDT) 决策树_第1张图片
Paste_Image.png

GBDT:

Gradient Boosting Decision Tree (GBDT) 决策树_第2张图片
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 (GBDT) 决策树)