[R - ml]函数实现 bagging

2018-11-26  本文已影响144人  XuXiaolu

ipred包提供是了决策树的一个bagging实现

library(ipred)
set.seed(300)
mybag = bagging(Good.Loan ~. , data = credit, nbagg = 25)
credit_pred = predict(mybag, credit)
table(credit_pred, credit$Good.Loan)

训练数据的模型已经相当好了!
不过还是要用CV的方法,检验对未来数据的性能。

我们考虑用10-fold CV 下的 bagged tree 方式。

library(caret)
set.seed(300)
ctrl = trainControl(method = 'cv', number = 10) # number 相当于 10-fold
train(Good.Loan ~., data = credit, method = 'treebag', trControl = ctrl)

kappa 值 0.3669041

除了决策树的bag, caret 包还提供了通用的bag()函数。
该函数利用一个控制对象来配置bagging的过程,该对象定义了三个函数,用于适配(fitting)的函数,
预测函数,
聚合函数(aggregrating the votes)

以SVM为例,kernlab包提供了ksvm()函数
那么bag()函数要求我们提供 训练svm, 预测以及统计votes的功能。
caret包提供了svmBag对象用于这一目的:

str(svmBag) # 一个list 包含了三个函数
svmBag$fit

因此我们可以从用如下方法构建bag 的控制对象:

bagctrl <- bagControl(fit = svmBag$fit,  # 训练
                      predict = svmBag$pred, # 预测
                      aggregate = svmBag$aggregate) # 聚集

利用该对象来控制 bagging 过程

set.seed(300)
svmbag = train(Good.Loan ~., data = credit,
               method = 'bag', trControl = ctrl, bagControl = bagctrl)
svmbag
上一篇 下一篇

猜你喜欢

热点阅读