首先,区分概念:分类树&回归树分类树的准则是最大熵准则(相当于分得的两类远离1:1);回归树的准则是最小化均方差(实际值-预测值)^2/N。
再总结下GBDT树:GBDT把所有树的结论累加起来做最终结论。它的核心是:每棵树学的是之前所有树结论和的残差,即真实值-预测值。在GBDT中,可以看到第一棵树的残差向量是(-1,1,-1,1),这就是Gradient,是全局最优方向,只是我们没有计算cost function,也没有求导。
GBDT的优点在于:1.可以有效减少feature,降低过拟合现象。2.每一步的残差计算其实变相增大了分错instance的权重,而已经分队的instance则都趋于0。
传统的决策树:
GBDT:
Paste_Image.pngR 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
网友评论