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
网友评论