1、用gbm包来提升决策树能力中国有句老话:三个臭皮匠,顶个诸葛亮。这个说法至少在变形金刚中得到了体现,没有组合之前的大力神只是五个可以被柱子哥随手秒掉工地苦力。但组合之后却是威力大增。在机器学习领域也是如此,一堆能力一般的“弱学习器”也能组合成一个“强学习器”。前篇文章提到的随机森林就是一种组合学习的方法,本文要说的是另一类组合金刚: 提升方法(Boosting) 。提升方法是一大类集成分类学习的统称。它用不同的权重将基学习器进行线性组合,使表现优秀的学习器得到重用。在 R语言中gbm包 就是用来实现一般提升方法的扩展包。根 基学习器 优 方法的不同,提升方法也有 种不同的形 。 提升方法Ada
2、Boost 它是一种 统 重要的Boost 法,在学习 一个 本 一个权重,本权重一 。在 一 后,增 学习 本的权重,这使得 本的重要性 来,在进行了N后,将得到N个currency1的学习器。后将它“组合来得到一个的fi。 fl 提升方法Gradient Boosting fl 提升 法 来不是 ,但“ 线性 以类就”了。一线性是 到一组 使得 。如只用一来 线一有大 来,此 就可以用来 ,以可在fi中 这个。 同 的,fl 提升是 根 fi ,之后 一个基学习器来 , 基学习器是在fl 方 少。 将基学习器 权重 (学习 ) 来的fi进行线性组合形成 的fi。这 就可以 到一个使 的 到
3、的fi。在 基学习器 可以使用 方法此 就称之 随机fl 提升 法stochastic gradient boosting 。 在gbm包中, 用的是决策树 基学习器,重要的 如: 的形 (distribution) (n.trees) 学习 (shrinkage) (bag.fraction) 决策树的 (interaction.depth)的形 ” ,分类一般 bernoulli分 , 可以 gaussian分 。学习 方 ,“ 子 得 大” ,以学习 是 ,但是 子 的话, 就得增 ,也就是 的 要 大能使fi到优,这 也 大了。gbm 的 验法则是 shrinkage 在0.01-0.
4、001之, n.trees 在3000-10000之。 “用mlbench包中的 集来一gbm包的使用。其中响 变 diabetes,即病人的糖尿病诊断是阳性还是阴性。 # 载包 :library(gbm)data(PimaIndiansDiabetes2,package=mlbench)# 将响 变转 0-1格 :data - PimaIndiansDiabetes2data$diabetes- as.numeric(data$diabetes)data -transform(data,diabetes=diabetes-1)# 使用gbm :model -gbm(diabetes.,dat
5、a=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)# 用caret包观察预测精 :library(caret)data - PimaIndiansDiabetes2fitControl -trainControl(method = “cv“, num
6、ber = 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)model2Accuracy Kappa Accuracy SD Kappa SD 0.78 0.504 0.0357 0.0702 观察到gbm到800左右优,得到的预测正确 0.78,这个随机森林的正确 还要略高一 。